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 <odaki@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