From: Hyman Huang(黄勇) <huangy81@xxxxxxxxxxxxxxx> vcpu method only works when kvm dirty ring is enabled, use kvm_dirty_ring_enabled to probe if dirty ring is enabled. Signed-off-by: Hyman Huang(黄勇) <huangy81@xxxxxxxxxxxxxxx> --- migration/dirtyrate.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/migration/dirtyrate.c b/migration/dirtyrate.c index 7952eb6117..da6500c8ec 100644 --- a/migration/dirtyrate.c +++ b/migration/dirtyrate.c @@ -16,6 +16,7 @@ #include "cpu.h" #include "exec/ramblock.h" #include "qemu/rcu_queue.h" +#include "sysemu/kvm.h" #include "qapi/qapi-commands-migration.h" #include "ram.h" #include "trace.h" @@ -415,6 +416,14 @@ void qmp_calc_dirty_rate(int64_t calc_time, return; } + /* + * Vcpu method only works when kvm dirty ring is enabled. + */ + if (has_vcpu && vcpu && !kvm_dirty_ring_enabled()) { + error_setg(errp, "kvm dirty ring is disabled, use sample method."); + return; + } + /* * Init calculation state as unstarted. */ @@ -427,6 +436,7 @@ void qmp_calc_dirty_rate(int64_t calc_time, config.sample_period_seconds = calc_time; config.sample_pages_per_gigabytes = DIRTYRATE_DEFAULT_SAMPLE_PAGES; + config.vcpu = has_vcpu ? vcpu : false; qemu_thread_create(&thread, "get_dirtyrate", get_dirtyrate_thread, (void *)&config, QEMU_THREAD_DETACHED); } -- 2.24.3