aboutsummaryrefslogtreecommitdiff
path: root/memory.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2013-04-16 15:39:51 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2013-05-24 18:43:42 +0200
commitf43793c7caab49c68b41c3b8524fc35b4c206856 (patch)
treecc38cd0280623e920a707cd6625a4526b2928fcf /memory.c
parent86a8623692b1b559a419a92eb8b6897c221bca74 (diff)
downloadqemu-f43793c7caab49c68b41c3b8524fc35b4c206856.zip
qemu-f43793c7caab49c68b41c3b8524fc35b4c206856.tar.gz
qemu-f43793c7caab49c68b41c3b8524fc35b4c206856.tar.bz2
memory: populate FlatView for new address spaces
Even a new address space might have a non-empty FlatView. In order to initialize it properly, address_space_init should (a) call memory_region_transaction_commit after the address space is inserted into the list; (b) force memory_region_transaction_commit to do something. This bug was latent so far because all address spaces started empty, including the PCI address space where the bus master region is initially disabled. However, the target address space of an IOMMU is usually rooted at get_system_memory(), which might not be empty at the time the IOMMU is created. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'memory.c')
-rw-r--r--memory.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/memory.c b/memory.c
index 9478f98..99f046d 100644
--- a/memory.c
+++ b/memory.c
@@ -1576,8 +1576,9 @@ void address_space_init(AddressSpace *as, MemoryRegion *root)
as->ioeventfds = NULL;
QTAILQ_INSERT_TAIL(&address_spaces, as, address_spaces_link);
as->name = NULL;
- memory_region_transaction_commit();
address_space_init_dispatch(as);
+ memory_region_update_pending |= root->enabled;
+ memory_region_transaction_commit();
}
void address_space_destroy(AddressSpace *as)