The KVM_SET_CLOCK command calls pvclock_update_vm_gtod_copy() to update the masterclock data. Many vCPUs may already have KVM_REQ_MASTERCLOCK_UPDATE pending before KVM_SET_CLOCK is invoked. If pvclock_update_vm_gtod_copy() decides to use the masterclock, there is no need to update the masterclock multiple times afterward. As noted in commit c52ffadc65e2 ("KVM: x86: Don't unnecessarily force masterclock update on vCPU hotplug"), each unnecessary KVM_REQ_MASTERCLOCK_UPDATE can cause the kvm-clock time to jump. Therefore, clear KVM_REQ_MASTERCLOCK_UPDATE for each vCPU at the end of KVM_SET_CLOCK when the master clock is active. The 'tsc_write_lock' ensures that only requests issued before KVM_SET_CLOCK are cleared. Cc: David Woodhouse Signed-off-by: Dongli Zhang --- arch/x86/kvm/x86.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 5e7418cfd0af..0599949a7803 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -7173,6 +7173,8 @@ static int kvm_vm_ioctl_set_clock(struct kvm *kvm, void __user *argp) { struct kvm_arch *ka = &kvm->arch; struct kvm_clock_data data; + struct kvm_vcpu *vcpu; + unsigned long i; u64 now_raw_ns; if (copy_from_user(&data, argp, sizeof(data))) @@ -7211,6 +7213,12 @@ static int kvm_vm_ioctl_set_clock(struct kvm *kvm, void __user *argp) else now_raw_ns = get_kvmclock_base_ns(); ka->kvmclock_offset = data.clock - now_raw_ns; + + if (kvm->arch.use_master_clock) { + kvm_for_each_vcpu(i, vcpu, kvm) + kvm_clear_request(KVM_REQ_MASTERCLOCK_UPDATE, vcpu); + } + kvm_end_pvclock_update(kvm); return 0; } -- 2.39.3