Use the new "dirty_bitmap_resize" interface to reduce dirty bitmap blocks after we remove a ramblock from ramlist.
Signed-off-by: Keqian Zhu <zhukeqi...@huawei.com> --- softmmu/physmem.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/softmmu/physmem.c b/softmmu/physmem.c index f6ff78378e..2a17e0a89a 100644 --- a/softmmu/physmem.c +++ b/softmmu/physmem.c @@ -2131,6 +2131,8 @@ static void reclaim_ramblock(RAMBlock *block) void qemu_ram_free(RAMBlock *block) { + ram_addr_t old_ram_size, new_ram_size; + if (!block) { return; } @@ -2140,12 +2142,18 @@ void qemu_ram_free(RAMBlock *block) } qemu_mutex_lock_ramlist(); + + old_ram_size = last_ram_page(); QLIST_REMOVE_RCU(block, next); + new_ram_size = last_ram_page(); + dirty_bitmap_resize(old_ram_size, new_ram_size); + ram_list.mru_block = NULL; /* Write list before version */ smp_wmb(); ram_list.version++; call_rcu(block, reclaim_ramblock, rcu); + qemu_mutex_unlock_ramlist(); } -- 2.23.0