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