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