From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=46191 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PIQSI-0004Xr-BI for qemu-devel@nongnu.org; Tue, 16 Nov 2010 13:40:35 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PIQSH-0002ew-Bh for qemu-devel@nongnu.org; Tue, 16 Nov 2010 13:40:34 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44760) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PIQSH-0002eS-4Q for qemu-devel@nongnu.org; Tue, 16 Nov 2010 13:40:33 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id oAGIeSKw011080 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 16 Nov 2010 13:40:32 -0500 Date: Tue, 16 Nov 2010 19:43:06 +0200 From: "Michael S. Tsirkin" Message-ID: <20101116174306.GC4077@redhat.com> References: <1288704898-30234-1-git-send-email-kraxel@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1288704898-30234-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] Re: [PATCH] spice: add qxl device List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gerd Hoffmann Cc: qemu-devel@nongnu.org On Tue, Nov 02, 2010 at 02:34:58PM +0100, Gerd Hoffmann wrote: > + if (ram_size < 32 * 1024 * 1024) > + ram_size = 32 * 1024 * 1024; > + vga_common_init(vga, ram_size); > + vga_init(vga); > + register_ioport_write(0x3c0, 16, 1, qxl_vga_ioport_write, vga); > + register_ioport_write(0x3b4, 2, 1, qxl_vga_ioport_write, vga); > + register_ioport_write(0x3d4, 2, 1, qxl_vga_ioport_write, vga); > + register_ioport_write(0x3ba, 1, 1, qxl_vga_ioport_write, vga); > + register_ioport_write(0x3da, 1, 1, qxl_vga_ioport_write, vga); > + > + vga->ds = graphic_console_init(qxl_hw_update, qxl_hw_invalidate, > + qxl_hw_screen_dump, qxl_hw_text_update, qxl); > + qxl->ssd.ds = vga->ds; > + qxl->ssd.bufsize = (16 * 1024 * 1024); > + qxl->ssd.buf = qemu_malloc(qxl->ssd.bufsize); > + > + qxl0 = qxl; What happens when this device is then removed? > + register_displaychangelistener(vga->ds, &display_listener); > + > + if (qxl->pci.romfile == NULL) { > + if (pci_device_id == 0x01ff) { > + qxl->pci.romfile = qemu_strdup("vgabios-qxldev.bin"); > + } else { > + qxl->pci.romfile = qemu_strdup("vgabios-qxl.bin"); > + } > + } > + pci_config_set_class(config, PCI_CLASS_DISPLAY_VGA); > + } else { > + if (ram_size < 16 * 1024 * 1024) > + ram_size = 16 * 1024 * 1024; > + qxl->vga.vram_size = ram_size; > + qxl->vga.vram_offset = qemu_ram_alloc(&qxl->pci.qdev, "qxl.vgavram", > + qxl->vga.vram_size); > + qxl->vga.vram_ptr = qemu_get_ram_ptr(qxl->vga.vram_offset); > + > + pci_config_set_class(config, PCI_CLASS_DISPLAY_OTHER); So 1st device has device id different from the rest? Why? > + } > + > + pci_config_set_vendor_id(config, REDHAT_PCI_VENDOR_ID); > + pci_config_set_device_id(config, pci_device_id); > + pci_set_byte(&config[PCI_REVISION_ID], pci_device_rev); > + pci_set_byte(&config[PCI_INTERRUPT_PIN], 1); > + > + qxl->rom_size = qxl_rom_size(); > + qxl->rom_offset = qemu_ram_alloc(&qxl->pci.qdev, "qxl.vrom", qxl->rom_size); > + init_qxl_rom(qxl); > + init_qxl_ram(qxl); > + > + if (qxl->vram_size < 16 * 1024 * 1024) { > + qxl->vram_size = 16 * 1024 * 1024; > + } > + if (qxl->revision == 1) { > + qxl->vram_size = 4096; > + } > + qxl->vram_size = msb_mask(qxl->vram_size * 2 - 1); > + qxl->vram_offset = qemu_ram_alloc(&qxl->pci.qdev, "qxl.vram", qxl->vram_size); > + > + io_size = msb_mask(QXL_IO_RANGE_SIZE * 2 - 1); > + if (qxl->revision == 1) { > + io_size = 8; > + } > + > + pci_register_bar(&qxl->pci, QXL_IO_RANGE_INDEX, > + io_size, PCI_BASE_ADDRESS_SPACE_IO, qxl_map); > + > + pci_register_bar(&qxl->pci, QXL_ROM_RANGE_INDEX, > + qxl->rom_size, PCI_BASE_ADDRESS_SPACE_MEMORY, > + qxl_map); > + > + pci_register_bar(&qxl->pci, QXL_RAM_RANGE_INDEX, > + qxl->vga.vram_size, PCI_BASE_ADDRESS_SPACE_MEMORY, > + qxl_map); > + > + pci_register_bar(&qxl->pci, QXL_VRAM_RANGE_INDEX, qxl->vram_size, > + PCI_BASE_ADDRESS_SPACE_MEMORY, qxl_map); > + > + qxl->ssd.qxl.base.sif = &qxl_interface.base; > + qxl->ssd.qxl.id = qxl->id; > + qemu_spice_add_interface(&qxl->ssd.qxl.base); > + qemu_add_vm_change_state_handler(qxl_vm_change_state_handler, qxl); > + > + init_pipe_signaling(qxl); > + qxl_reset_state(qxl); > + > + device_id++; what happens when this wraps around? Since it's an int probably undefined behaviour ...