aboutsummaryrefslogtreecommitdiff
path: root/memory.h
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2011-09-14 11:54:58 +0300
committerAvi Kivity <avi@redhat.com>2011-12-04 19:00:33 +0200
commit6bba19ba4e2b8c89496569439ca38a328cf29a77 (patch)
tree3c00c804e3217e72f440cf1bb154864b68ace053 /memory.h
parentf44336c594c7e7887ee43ece3b53ba68b827fd1d (diff)
downloadqemu-6bba19ba4e2b8c89496569439ca38a328cf29a77.zip
qemu-6bba19ba4e2b8c89496569439ca38a328cf29a77.tar.gz
qemu-6bba19ba4e2b8c89496569439ca38a328cf29a77.tar.bz2
memory: introduce memory_region_set_enabled()
This allows users to disable a memory region without removing it from the hierarchy, simplifying the implementation of memory routers. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'memory.h')
-rw-r--r--memory.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/memory.h b/memory.h
index 53bf261..c6997c4 100644
--- a/memory.h
+++ b/memory.h
@@ -123,6 +123,7 @@ struct MemoryRegion {
bool terminates;
bool readable;
bool readonly; /* For RAM regions */
+ bool enabled;
MemoryRegion *alias;
target_phys_addr_t alias_offset;
unsigned priority;
@@ -501,6 +502,22 @@ void memory_region_add_subregion_overlap(MemoryRegion *mr,
void memory_region_del_subregion(MemoryRegion *mr,
MemoryRegion *subregion);
+
+/*
+ * memory_region_set_enabled: dynamically enable or disable a region
+ *
+ * Enables or disables a memory region. A disabled memory region
+ * ignores all accesses to itself and its subregions. It does not
+ * obscure sibling subregions with lower priority - it simply behaves as
+ * if it was removed from the hierarchy.
+ *
+ * Regions default to being enabled.
+ *
+ * @mr: the region to be updated
+ * @enabled: whether to enable or disable the region
+ */
+void memory_region_set_enabled(MemoryRegion *mr, bool enabled);
+
/* Start a transaction; changes will be accumulated and made visible only
* when the transaction ends.
*/