From 4a6910f052f8a5220afeda25acfba6d6d29c9824 Mon Sep 17 00:00:00 2001 From: Matt Borgerson Date: Tue, 18 Feb 2020 04:01:19 -0700 Subject: [PATCH] memory: Sync before doing a test and clear --- memory.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/memory.c b/memory.c index 6b1a28609b..148a7da565 100644 --- a/memory.c +++ b/memory.c @@ -2049,19 +2049,6 @@ void memory_region_set_client_dirty(MemoryRegion *mr, hwaddr addr, size, 1 << client); } -bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr, - hwaddr size, unsigned client) -{ - if (mr->alias) { - return memory_region_test_and_clear_dirty(mr->alias, - addr - mr->alias_offset, - size, client); - } - assert(mr->terminates); - return cpu_physical_memory_test_and_clear_dirty( - memory_region_get_ram_addr(mr) + addr, size, client); -} - static void memory_region_sync_dirty_bitmap(MemoryRegion *mr) { MemoryListener *listener; @@ -2090,6 +2077,20 @@ static void memory_region_sync_dirty_bitmap(MemoryRegion *mr) } } +bool memory_region_test_and_clear_dirty(MemoryRegion *mr, hwaddr addr, + hwaddr size, unsigned client) +{ + if (mr->alias) { + return memory_region_test_and_clear_dirty(mr->alias, + addr - mr->alias_offset, + size, client); + } + assert(mr->terminates); + memory_region_sync_dirty_bitmap(mr); + return cpu_physical_memory_test_and_clear_dirty( + memory_region_get_ram_addr(mr) + addr, size, client); +} + void memory_region_clear_dirty_bitmap(MemoryRegion *mr, hwaddr start, hwaddr len) {