summaryrefslogtreecommitdiff
path: root/memory.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2011-12-04 19:16:50 +0200
committerAvi Kivity <avi@redhat.com>2011-12-05 12:04:05 +0200
commit4703359e0eeb27c382fdf2951b842cf8bde26672 (patch)
tree441f52db91415b9eec6a322d9d1c9f5d15ac71e8 /memory.c
parent2282e1af408db47bab0f900344c0ba0935835f48 (diff)
downloadqemu-4703359e0eeb27c382fdf2951b842cf8bde26672.tar.gz
memory: introduce memory_region_set_alias_offset()
Add an API to update an alias offset of an active alias. This can be used to simplify implementation of dynamic memory banks. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'memory.c')
-rw-r--r--memory.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/memory.c b/memory.c
index a080d210c1..7e842b3ad5 100644
--- a/memory.c
+++ b/memory.c
@@ -1345,6 +1345,20 @@ void memory_region_set_address(MemoryRegion *mr, target_phys_addr_t addr)
memory_region_transaction_commit();
}
+void memory_region_set_alias_offset(MemoryRegion *mr, target_phys_addr_t offset)
+{
+ target_phys_addr_t old_offset = mr->alias_offset;
+
+ assert(mr->alias);
+ mr->alias_offset = offset;
+
+ if (offset == old_offset || !mr->parent) {
+ return;
+ }
+
+ memory_region_update_topology(mr);
+}
+
void set_system_memory_map(MemoryRegion *mr)
{
address_space_memory.root = mr;