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/pci/pci.c        |  6 +++---
 hw/pci/pci_bridge.c | 11 +++++------
 2 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 340384a8876a..7ab93df2969d 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -1188,7 +1188,7 @@ static void do_pci_unregister_device(PCIDevice *pci_dev)
     if (xen_mode == XEN_EMULATE) {
         xen_evtchn_remove_pci_device(pci_dev);
     }
-    address_space_destroy(&pci_dev->bus_master_as);
+    object_unparent(OBJECT(&pci_dev->bus_master_as));
 }
 
 /* Extract PCIReqIDCache into BDF format */
@@ -1359,8 +1359,8 @@ static PCIDevice *do_pci_register_device(PCIDevice 
*pci_dev,
 
     memory_region_init(&pci_dev->bus_master_container_region, OBJECT(pci_dev),
                        "bus master container", UINT64_MAX);
-    address_space_init(&pci_dev->bus_master_as, NULL,
-                       &pci_dev->bus_master_container_region, pci_dev->name);
+    address_space_init(&pci_dev->bus_master_as, OBJECT(pci_dev),
+                       &pci_dev->bus_master_container_region, "bus-master-as");
     pci_dev->bus_master_as.max_bounce_buffer_size =
         pci_dev->max_bounce_buffer_size;
 
diff --git a/hw/pci/pci_bridge.c b/hw/pci/pci_bridge.c
index 94b61b907ea2..fd74622edb9f 100644
--- a/hw/pci/pci_bridge.c
+++ b/hw/pci/pci_bridge.c
@@ -388,13 +388,12 @@ void pci_bridge_initfn(PCIDevice *dev, const char 
*typename)
     sec_bus->map_irq = br->map_irq ? br->map_irq : pci_swizzle_map_irq_fn;
     sec_bus->address_space_mem = &br->address_space_mem;
     memory_region_init(&br->address_space_mem, OBJECT(br), "pci_bridge_pci", 
UINT64_MAX);
-    address_space_init(&br->as_mem, NULL, &br->address_space_mem,
-                       "pci_bridge_pci_mem");
+    address_space_init(&br->as_mem, OBJECT(br), &br->address_space_mem,
+                       "mem-as");
     sec_bus->address_space_io = &br->address_space_io;
     memory_region_init(&br->address_space_io, OBJECT(br), "pci_bridge_io",
                        4 * GiB);
-    address_space_init(&br->as_io, NULL, &br->address_space_io,
-                       "pci_bridge_pci_io");
+    address_space_init(&br->as_io, OBJECT(br), &br->address_space_io, "io-as");
     pci_bridge_region_update(br, true);
     QLIST_INIT(&sec_bus->child);
     QLIST_INSERT_HEAD(&parent->child, sec_bus, sibling);
@@ -411,8 +410,8 @@ void pci_bridge_exitfn(PCIDevice *pci_dev)
     PCIBridge *s = PCI_BRIDGE(pci_dev);
     assert(QLIST_EMPTY(&s->sec_bus.child));
     QLIST_REMOVE(&s->sec_bus, sibling);
-    address_space_destroy(&s->as_mem);
-    address_space_destroy(&s->as_io);
+    object_unparent(OBJECT(&s->as_mem));
+    object_unparent(OBJECT(&s->as_io));
     pci_bridge_region_del(s, &s->windows);
     pci_bridge_region_cleanup(s, &s->windows);
     /* object_unparent() is called automatically during device deletion */

-- 
2.51.0


Reply via email to