summaryrefslogtreecommitdiffstats
path: root/include/exec
diff options
context:
space:
mode:
authorBeata Michalska2019-11-21 01:08:41 +0100
committerPeter Maydell2019-12-16 11:46:35 +0100
commit61c490e25e081af39ff40556f6c1229b8b011585 (patch)
treea05523934595b80768e7060a982fbc89041bfa08 /include/exec
parenttcg: cputlb: Add probe_read (diff)
downloadqemu-61c490e25e081af39ff40556f6c1229b8b011585.tar.gz
qemu-61c490e25e081af39ff40556f6c1229b8b011585.tar.xz
qemu-61c490e25e081af39ff40556f6c1229b8b011585.zip
Memory: Enable writeback for given memory region
Add an option to trigger memory writeback to sync given memory region with the corresponding backing store, case one is available. This extends the support for persistent memory, allowing syncing on-demand. Signed-off-by: Beata Michalska <beata.michalska@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-id: 20191121000843.24844-3-beata.michalska@linaro.org Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include/exec')
-rw-r--r--include/exec/memory.h6
-rw-r--r--include/exec/ram_addr.h8
2 files changed, 14 insertions, 0 deletions
diff --git a/include/exec/memory.h b/include/exec/memory.h
index e499dc215b..27a84e0cc3 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -1265,6 +1265,12 @@ void *memory_region_get_ram_ptr(MemoryRegion *mr);
*/
void memory_region_ram_resize(MemoryRegion *mr, ram_addr_t newsize,
Error **errp);
+/**
+ * memory_region_do_writeback: Trigger writeback for selected address range
+ * [addr, addr + size]
+ *
+ */
+void memory_region_do_writeback(MemoryRegion *mr, hwaddr addr, hwaddr size);
/**
* memory_region_set_log: Turn dirty logging on or off for a region.
diff --git a/include/exec/ram_addr.h b/include/exec/ram_addr.h
index bed0554f4d..5adebb0bc7 100644
--- a/include/exec/ram_addr.h
+++ b/include/exec/ram_addr.h
@@ -174,6 +174,14 @@ void qemu_ram_free(RAMBlock *block);
int qemu_ram_resize(RAMBlock *block, ram_addr_t newsize, Error **errp);
+void qemu_ram_writeback(RAMBlock *block, ram_addr_t start, ram_addr_t length);
+
+/* Clear whole block of mem */
+static inline void qemu_ram_block_writeback(RAMBlock *block)
+{
+ qemu_ram_writeback(block, 0, block->used_length);
+}
+
#define DIRTY_CLIENTS_ALL ((1 << DIRTY_MEMORY_NUM) - 1)
#define DIRTY_CLIENTS_NOCODE (DIRTY_CLIENTS_ALL & ~(1 << DIRTY_MEMORY_CODE))