]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 Sep 2021 11:34:43 +0000 (13:34 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 Sep 2021 11:34:43 +0000 (13:34 +0200)
added patches:
kvm-x86-update-vcpu-s-hv_clock-before-back-to-guest-when-tsc_offset-is-adjusted.patch

queue-4.4/kvm-x86-update-vcpu-s-hv_clock-before-back-to-guest-when-tsc_offset-is-adjusted.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/kvm-x86-update-vcpu-s-hv_clock-before-back-to-guest-when-tsc_offset-is-adjusted.patch b/queue-4.4/kvm-x86-update-vcpu-s-hv_clock-before-back-to-guest-when-tsc_offset-is-adjusted.patch
new file mode 100644 (file)
index 0000000..2a7fd3f
--- /dev/null
@@ -0,0 +1,40 @@
+From d9130a2dfdd4b21736c91b818f87dbc0ccd1e757 Mon Sep 17 00:00:00 2001
+From: Zelin Deng <zelin.deng@linux.alibaba.com>
+Date: Wed, 28 Apr 2021 10:22:01 +0800
+Subject: KVM: x86: Update vCPU's hv_clock before back to guest when tsc_offset is adjusted
+
+From: Zelin Deng <zelin.deng@linux.alibaba.com>
+
+commit d9130a2dfdd4b21736c91b818f87dbc0ccd1e757 upstream.
+
+When MSR_IA32_TSC_ADJUST is written by guest due to TSC ADJUST feature
+especially there's a big tsc warp (like a new vCPU is hot-added into VM
+which has been up for a long time), tsc_offset is added by a large value
+then go back to guest. This causes system time jump as tsc_timestamp is
+not adjusted in the meantime and pvclock monotonic character.
+To fix this, just notify kvm to update vCPU's guest time before back to
+guest.
+
+Cc: stable@vger.kernel.org
+Signed-off-by: Zelin Deng <zelin.deng@linux.alibaba.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Message-Id: <1619576521-81399-2-git-send-email-zelin.deng@linux.alibaba.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/x86/kvm/x86.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -2172,6 +2172,10 @@ int kvm_set_msr_common(struct kvm_vcpu *
+                       if (!msr_info->host_initiated) {
+                               s64 adj = data - vcpu->arch.ia32_tsc_adjust_msr;
+                               adjust_tsc_offset_guest(vcpu, adj);
++                              /* Before back to guest, tsc_timestamp must be adjusted
++                               * as well, otherwise guest's percpu pvclock time could jump.
++                               */
++                              kvm_make_request(KVM_REQ_CLOCK_UPDATE, vcpu);
+                       }
+                       vcpu->arch.ia32_tsc_adjust_msr = data;
+               }
index 2858b2ec47fdad77ba1782c1d238a10551c9125d..82fbaa9c6a8e718ca37fffa6b4ed3a47c8631899 100644 (file)
@@ -67,3 +67,4 @@ bcma-fix-memory-leak-for-internally-handled-cores.patch
 ipv4-make-exception-cache-less-predictible.patch
 time-handle-negative-seconds-correctly-in-timespec64_to_ns.patch
 tty-fix-data-race-between-tiocsti-and-flush_to_ldisc.patch
+kvm-x86-update-vcpu-s-hv_clock-before-back-to-guest-when-tsc_offset-is-adjusted.patch