]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 13 Mar 2016 03:49:46 +0000 (19:49 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 13 Mar 2016 03:49:46 +0000 (19:49 -0800)
added patches:
kvm-x86-move-steal-time-initialization-to-vcpu-entry-time.patch

queue-3.10/kvm-x86-move-steal-time-initialization-to-vcpu-entry-time.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/kvm-x86-move-steal-time-initialization-to-vcpu-entry-time.patch b/queue-3.10/kvm-x86-move-steal-time-initialization-to-vcpu-entry-time.patch
new file mode 100644 (file)
index 0000000..d07c350
--- /dev/null
@@ -0,0 +1,61 @@
+From 7cae2bedcbd4680b155999655e49c27b9cf020fa Mon Sep 17 00:00:00 2001
+From: Marcelo Tosatti <mtosatti@redhat.com>
+Date: Wed, 14 Oct 2015 19:33:09 -0300
+Subject: KVM: x86: move steal time initialization to vcpu entry time
+
+From: Marcelo Tosatti <mtosatti@redhat.com>
+
+commit 7cae2bedcbd4680b155999655e49c27b9cf020fa upstream.
+
+As reported at https://bugs.launchpad.net/qemu/+bug/1494350,
+it is possible to have vcpu->arch.st.last_steal initialized
+from a thread other than vcpu thread, say the iothread, via
+KVM_SET_MSRS.
+
+Which can cause an overflow later (when subtracting from vcpu threads
+sched_info.run_delay).
+
+To avoid that, move steal time accumulation to vcpu entry time,
+before copying steal time data to guest.
+
+Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
+Reviewed-by: David Matlack <dmatlack@google.com>
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ arch/x86/kvm/x86.c |    9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+--- a/arch/x86/kvm/x86.c
++++ b/arch/x86/kvm/x86.c
+@@ -1941,6 +1941,8 @@ static void accumulate_steal_time(struct
+ static void record_steal_time(struct kvm_vcpu *vcpu)
+ {
++      accumulate_steal_time(vcpu);
++
+       if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED))
+               return;
+@@ -2074,12 +2076,6 @@ int kvm_set_msr_common(struct kvm_vcpu *
+               if (!(data & KVM_MSR_ENABLED))
+                       break;
+-              vcpu->arch.st.last_steal = current->sched_info.run_delay;
+-
+-              preempt_disable();
+-              accumulate_steal_time(vcpu);
+-              preempt_enable();
+-
+               kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu);
+               break;
+@@ -2758,7 +2754,6 @@ void kvm_arch_vcpu_load(struct kvm_vcpu
+               vcpu->cpu = cpu;
+       }
+-      accumulate_steal_time(vcpu);
+       kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu);
+ }
index 7a202d94632bd67e582d7990db982ead82168de2..3697edb5b5d1c5ed47ee2bc5c03b079a34ef50f7 100644 (file)
@@ -7,3 +7,4 @@ iwlwifi-mvm-inc-pending-frames-counter-also-when-txing-non-sta.patch
 mac80211-fix-use-of-uninitialised-values-in-rx-aggregation.patch
 mac80211-minstrel_ht-set-default-tx-aggregation-timeout-to-0.patch
 powerpc-fix-dedotify-for-binutils-2.26.patch
+kvm-x86-move-steal-time-initialization-to-vcpu-entry-time.patch