Make AddressSpaces QOM objects to ensure that they are destroyed when
their owners are finalized and also to get a unique path for debugging
output.

The name arguments were used to distinguish AddresSpaces in debugging
output, but they will represent property names after QOM-ification and
debugging output will show QOM paths. So change them to make them more
concise and also avoid conflicts with other properties.

Signed-off-by: Akihiko Odaki <od...@rsg.ci.i.u-tokyo.ac.jp>
---
 hw/virtio/virtio-iommu.c |  3 ++-
 hw/virtio/virtio-pci.c   | 12 ++++++------
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/hw/virtio/virtio-iommu.c b/hw/virtio/virtio-iommu.c
index d9713a38bfae..84c6076dc0e3 100644
--- a/hw/virtio/virtio-iommu.c
+++ b/hw/virtio/virtio-iommu.c
@@ -421,6 +421,7 @@ static AddressSpace *virtio_iommu_find_add_as(PCIBus *bus, 
void *opaque,
         char *name = g_strdup_printf("%s-%d-%d",
                                      TYPE_VIRTIO_IOMMU_MEMORY_REGION,
                                      mr_index++, devfn);
+        g_autofree char *as_name = g_strconcat(name, "-as", NULL);
         sdev = sbus->pbdev[devfn] = g_new0(IOMMUDevice, 1);
 
         sdev->viommu = s;
@@ -430,7 +431,7 @@ static AddressSpace *virtio_iommu_find_add_as(PCIBus *bus, 
void *opaque,
         trace_virtio_iommu_init_iommu_mr(name);
 
         memory_region_init(&sdev->root, OBJECT(s), name, UINT64_MAX);
-        address_space_init(&sdev->as, NULL, &sdev->root, TYPE_VIRTIO_IOMMU);
+        address_space_init(&sdev->as, OBJECT(s), &sdev->root, as_name);
         add_prop_resv_regions(sdev);
 
         /*
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index a3cd8f642706..7b63829c6c56 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -2062,8 +2062,8 @@ static void virtio_pci_device_plugged(DeviceState *d, 
Error **errp)
         if (modern_pio) {
             memory_region_init(&proxy->io_bar, OBJECT(proxy),
                                "virtio-pci-io", 0x4);
-            address_space_init(&proxy->modern_cfg_io_as, NULL, &proxy->io_bar,
-                               "virtio-pci-cfg-io-as");
+            address_space_init(&proxy->modern_cfg_io_as, OBJECT(proxy),
+                               &proxy->io_bar, "io-as");
 
             pci_register_bar(&proxy->pci_dev, proxy->modern_io_bar_idx,
                              PCI_BASE_ADDRESS_SPACE_IO, &proxy->io_bar);
@@ -2199,8 +2199,8 @@ static void virtio_pci_realize(PCIDevice *pci_dev, Error 
**errp)
                        /* PCI BAR regions must be powers of 2 */
                        pow2ceil(proxy->notify.offset + proxy->notify.size));
 
-    address_space_init(&proxy->modern_cfg_mem_as, NULL, &proxy->modern_bar,
-                       "virtio-pci-cfg-mem-as");
+    address_space_init(&proxy->modern_cfg_mem_as, OBJECT(proxy),
+                       &proxy->modern_bar, "mem-as");
 
     if (proxy->disable_legacy == ON_OFF_AUTO_AUTO) {
         proxy->disable_legacy = pcie_port ? ON_OFF_AUTO_ON : ON_OFF_AUTO_OFF;
@@ -2296,9 +2296,9 @@ static void virtio_pci_exit(PCIDevice *pci_dev)
         pci_is_express(pci_dev)) {
         pcie_aer_exit(pci_dev);
     }
-    address_space_destroy(&proxy->modern_cfg_mem_as);
+    object_unparent(OBJECT(&proxy->modern_cfg_mem_as));
     if (modern_pio) {
-        address_space_destroy(&proxy->modern_cfg_io_as);
+        object_unparent(OBJECT(&proxy->modern_cfg_io_as));
     }
 }
 

-- 
2.51.0


Reply via email to