Juergen Gross 143ba5
Patch-mainline: v5.15-rc1
Juergen Gross 143ba5
Git-commit: d9130a2dfdd4b21736c91b818f87dbc0ccd1e757
Juergen Gross 143ba5
References: git-fixes
Juergen Gross 143ba5
From: Zelin Deng <zelin.deng@linux.alibaba.com>
Juergen Gross 143ba5
Date: Wed, 28 Apr 2021 10:22:01 +0800
Juergen Gross 143ba5
Subject: [PATCH] KVM: x86: Update vCPU's hv_clock before back to guest when
Juergen Gross 143ba5
 tsc_offset is adjusted
Juergen Gross 143ba5
Juergen Gross 143ba5
When MSR_IA32_TSC_ADJUST is written by guest due to TSC ADJUST feature
Juergen Gross 143ba5
especially there's a big tsc warp (like a new vCPU is hot-added into VM
Juergen Gross 143ba5
which has been up for a long time), tsc_offset is added by a large value
Juergen Gross 143ba5
then go back to guest. This causes system time jump as tsc_timestamp is
Juergen Gross 143ba5
not adjusted in the meantime and pvclock monotonic character.
Juergen Gross 143ba5
To fix this, just notify kvm to update vCPU's guest time before back to
Juergen Gross 143ba5
guest.
Juergen Gross 143ba5
Juergen Gross 143ba5
Cc: stable@vger.kernel.org
Juergen Gross 143ba5
Signed-off-by: Zelin Deng <zelin.deng@linux.alibaba.com>
Juergen Gross 143ba5
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Juergen Gross 143ba5
Message-Id: <1619576521-81399-2-git-send-email-zelin.deng@linux.alibaba.com>
Juergen Gross 143ba5
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Juergen Gross 143ba5
Signed-off-by: Juergen Gross <jgross@suse.com>
Juergen Gross 143ba5
---
Juergen Gross 143ba5
 arch/x86/kvm/x86.c | 4 ++++
Juergen Gross 143ba5
 1 file changed, 4 insertions(+)
Juergen Gross 143ba5
Juergen Gross 143ba5
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
Juergen Gross 143ba5
index 1a00af1b076b..28ef14155726 100644
Juergen Gross 143ba5
--- a/arch/x86/kvm/x86.c
Juergen Gross 143ba5
+++ b/arch/x86/kvm/x86.c
Juergen Gross 143ba5
@@ -3321,6 +3321,10 @@ int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
Juergen Gross 143ba5
 			if (!msr_info->host_initiated) {
Juergen Gross 143ba5
 				s64 adj = data - vcpu->arch.ia32_tsc_adjust_msr;
Juergen Gross 143ba5
 				adjust_tsc_offset_guest(vcpu, adj);
Juergen Gross 143ba5
+				/* Before back to guest, tsc_timestamp must be adjusted
Juergen Gross 143ba5
+				 * as well, otherwise guest's percpu pvclock time could jump.
Juergen Gross 143ba5
+				 */
Juergen Gross 143ba5
+				kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);
Juergen Gross 143ba5
 			}
Juergen Gross 143ba5
 			vcpu->arch.ia32_tsc_adjust_msr = data;
Juergen Gross 143ba5
 		}
Juergen Gross 143ba5
-- 
Juergen Gross 143ba5
2.35.3
Juergen Gross 143ba5