The test (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) is wrong because the condition is valid when enable = 0 and current dirty log memory flag is set. As a consequence kvm_log_global_stop() does not stop the KVM dirty log tracking: kvm_set_migration_log(0) didn't do its job. So instead I propose to use kvm_slot_dirty_pages_log_change() which correctly compare the memory flags (old/new).
Signed-off-by: Vincent KHERBACHE <vincent.kherba...@inria.fr> --- kvm-all.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/kvm-all.c b/kvm-all.c index 2ca9143..f104f87 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -355,7 +355,7 @@ static int kvm_set_migration_log(int enable) { KVMState *s = kvm_state; KVMSlot *mem; - int i, err; + int i, err = 0; s->migration_log = enable; @@ -365,15 +365,9 @@ static int kvm_set_migration_log(int enable) if (!mem->memory_size) { continue; } - if (!!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES) == enable) { - continue; - } - err = kvm_set_user_memory_region(s, mem); - if (err) { - return err; - } + err = kvm_slot_dirty_pages_log_change(mem, (bool)enable); } - return 0; + return err; } /* get kvm's dirty pages bitmap and update qemu's */ -- 1.8.3.1