qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 8/9] virtio: init from virtio_pci_device_plugged to


From: Gerd Hoffmann
Subject: [Qemu-devel] [PATCH 8/9] virtio: init from virtio_pci_device_plugged to virtio_pci_realize
Date: Fri, 10 Apr 2015 14:31:50 +0200

This allows virtio-pci subclasses to change things before the plugged
callback applies them.

Signed-off-by: Gerd Hoffmann <address@hidden>
---
 hw/virtio/virtio-pci.c | 41 +++++++++++++++++++++--------------------
 1 file changed, 21 insertions(+), 20 deletions(-)

diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index c6fd73f..f73939e 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -1272,22 +1272,6 @@ static void virtio_pci_device_plugged(DeviceState *d)
     uint8_t *config;
     uint32_t size;
 
-    /*
-     * virtio pci bar layout
-     *
-     *   region 0   --  virtio legacy io bar
-     *   region 1   --  msi-x bar
-     *   region 2+3 --  not used by virtio-pci
-     *   region 4+5 --  virtio modern memory (64bit) bar
-     *
-     * Regions 2+3 can be used by VirtIOPCIProxy subclasses.
-     * virtio-vga places the vga framebuffer there.
-     *
-     */
-    proxy->legacy_io_bar  = 0;
-    proxy->msix_bar       = 1;
-    proxy->modern_mem_bar = 4;
-
     config = proxy->pci_dev.config;
     if (proxy->class_code) {
         pci_config_set_class(config, proxy->class_code);
@@ -1321,10 +1305,6 @@ static void virtio_pci_device_plugged(DeviceState *d)
         /* TODO: add io access for speed */
 
         virtio_add_feature(&proxy->host_features, VIRTIO_F_VERSION_1);
-        memory_region_init(&proxy->modern_bar, OBJECT(proxy), "virtio-pci",
-                           2 * QEMU_VIRTIO_PCI_QUEUE_MEM_MULT *
-                           VIRTIO_PCI_QUEUE_MAX);
-        virtio_pci_modern_regions_init(proxy);
         virtio_pci_modern_region_map(proxy, &proxy->common, &cap);
         virtio_pci_modern_region_map(proxy, &proxy->isr, &cap);
         virtio_pci_modern_region_map(proxy, &proxy->device, &cap);
@@ -1383,6 +1363,27 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error 
**errp)
     VirtIOPCIProxy *dev = VIRTIO_PCI(pci_dev);
     VirtioPCIClass *k = VIRTIO_PCI_GET_CLASS(pci_dev);
 
+    /*
+     * virtio pci bar layout
+     *
+     *   region 0   --  virtio legacy io bar
+     *   region 1   --  msi-x bar
+     *   region 2+3 --  not used by virtio-pci
+     *   region 4+5 --  virtio modern memory (64bit) bar
+     *
+     * Regions 2+3 can be used by VirtIOPCIProxy subclasses.
+     * virtio-vga places the vga framebuffer there.
+     *
+     */
+    dev->legacy_io_bar  = 0;
+    dev->msix_bar       = 1;
+    dev->modern_mem_bar = 4;
+
+    memory_region_init(&dev->modern_bar, OBJECT(dev), "virtio-pci",
+                       2 * QEMU_VIRTIO_PCI_QUEUE_MEM_MULT *
+                       VIRTIO_PCI_QUEUE_MAX);
+    virtio_pci_modern_regions_init(dev);
+
     virtio_pci_bus_new(&dev->bus, sizeof(dev->bus), dev);
     if (k->realize) {
         k->realize(dev, errp);
-- 
1.8.3.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]