memory: convert memory_region_destroy to object_unparent
Explicitly call object_unparent in the few places where we will re-create the memory region. If the memory region is simply being destroyed as part of device teardown, let QOM handle it. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
e3fb0ade83
commit
d8d9581460
@ -74,11 +74,16 @@ Region lifecycle
|
||||
----------------
|
||||
|
||||
A region is created by one of the constructor functions (memory_region_init*())
|
||||
and destroyed by the destructor (memory_region_destroy()). In between,
|
||||
a region can be added to an address space by using memory_region_add_subregion()
|
||||
and removed using memory_region_del_subregion(). Region attributes may be
|
||||
changed at any point; they take effect once the region becomes exposed to the
|
||||
guest.
|
||||
and attached to an object. It is then destroyed by object_unparent() or simply
|
||||
when the parent object dies.
|
||||
|
||||
In between, a region can be added to an address space
|
||||
by using memory_region_add_subregion() and removed using
|
||||
memory_region_del_subregion(). Destroying the region implicitly
|
||||
removes the region from the address space.
|
||||
|
||||
Region attributes may be changed at any point; they take effect once
|
||||
the region becomes exposed to the guest.
|
||||
|
||||
Overlapping regions and priority
|
||||
--------------------------------
|
||||
|
@ -176,7 +176,7 @@ static void vga_update_memory_access(VGACommonState *s)
|
||||
|
||||
if (s->has_chain4_alias) {
|
||||
memory_region_del_subregion(s->legacy_address_space, &s->chain4_alias);
|
||||
memory_region_destroy(&s->chain4_alias);
|
||||
object_unparent(OBJECT(&s->chain4_alias));
|
||||
s->has_chain4_alias = false;
|
||||
s->plane_updated = 0xf;
|
||||
}
|
||||
|
@ -584,7 +584,7 @@ static int vapic_map_rom_writable(VAPICROMState *s)
|
||||
|
||||
if (s->rom_mapped_writable) {
|
||||
memory_region_del_subregion(as, &s->rom);
|
||||
memory_region_destroy(&s->rom);
|
||||
object_unparent(OBJECT(&s->rom));
|
||||
}
|
||||
|
||||
/* grab RAM memory region (region @rom_paddr may still be pc.rom) */
|
||||
|
@ -297,7 +297,7 @@ static void gt64120_pci_mapping(GT64120State *s)
|
||||
if (s->PCI0IO_length)
|
||||
{
|
||||
memory_region_del_subregion(get_system_memory(), &s->PCI0IO_mem);
|
||||
memory_region_destroy(&s->PCI0IO_mem);
|
||||
object_unparent(OBJECT(&s->PCI0IO_mem));
|
||||
}
|
||||
/* Map new IO address */
|
||||
s->PCI0IO_start = s->regs[GT_PCI0IOLD] << 21;
|
||||
|
@ -436,7 +436,7 @@ static void omap_gpmc_cs_unmap(struct omap_gpmc_s *s, int cs)
|
||||
}
|
||||
memory_region_del_subregion(get_system_memory(), &f->container);
|
||||
memory_region_del_subregion(&f->container, omap_gpmc_cs_memregion(s, cs));
|
||||
memory_region_destroy(&f->container);
|
||||
object_unparent(OBJECT(&f->container));
|
||||
}
|
||||
|
||||
void omap_gpmc_reset(struct omap_gpmc_s *s)
|
||||
|
@ -2266,7 +2266,7 @@ static void vfio_vga_quirk_teardown(VFIODevice *vdev)
|
||||
while (!QLIST_EMPTY(&vdev->vga.region[i].quirks)) {
|
||||
VFIOQuirk *quirk = QLIST_FIRST(&vdev->vga.region[i].quirks);
|
||||
memory_region_del_subregion(&vdev->vga.region[i].mem, &quirk->mem);
|
||||
memory_region_destroy(&quirk->mem);
|
||||
object_unparent(OBJECT(&quirk->mem));
|
||||
QLIST_REMOVE(quirk, next);
|
||||
g_free(quirk);
|
||||
}
|
||||
@ -2290,7 +2290,7 @@ static void vfio_bar_quirk_teardown(VFIODevice *vdev, int nr)
|
||||
while (!QLIST_EMPTY(&bar->quirks)) {
|
||||
VFIOQuirk *quirk = QLIST_FIRST(&bar->quirks);
|
||||
memory_region_del_subregion(&bar->mem, &quirk->mem);
|
||||
memory_region_destroy(&quirk->mem);
|
||||
object_unparent(OBJECT(&quirk->mem));
|
||||
QLIST_REMOVE(quirk, next);
|
||||
g_free(quirk);
|
||||
}
|
||||
|
@ -422,7 +422,7 @@ static void sdram_set_bcr(ppc4xx_sdram_t *sdram,
|
||||
&sdram->containers[n]);
|
||||
memory_region_del_subregion(&sdram->containers[n],
|
||||
&sdram->ram_memories[n]);
|
||||
memory_region_destroy(&sdram->containers[n]);
|
||||
object_unparent(OBJECT(&sdram->containers[n]));
|
||||
}
|
||||
*bcrp = bcr & 0xFFDEE001;
|
||||
if (enabled && (bcr & 0x00000001)) {
|
||||
|
2
ioport.c
2
ioport.c
@ -154,7 +154,7 @@ void portio_list_destroy(PortioList *piolist)
|
||||
|
||||
for (i = 0; i < piolist->nr; ++i) {
|
||||
mrpio = container_of(piolist->regions[i], MemoryRegionPortioList, mr);
|
||||
memory_region_destroy(&mrpio->mr);
|
||||
object_unparent(OBJECT(&mrpio->mr));
|
||||
g_free(mrpio);
|
||||
}
|
||||
g_free(piolist->regions);
|
||||
|
Loading…
Reference in New Issue
Block a user