diff mbox

[1/1,SRU,Trusty/Utopic/Vivid/Wily] KVM: x86: move steal time initialization to vcpu entry time

Message ID 1457444306-25884-2-git-send-email-liang.chen@canonical.com
State New
Headers show

Commit Message

liang.chen@canonical.com March 8, 2016, 1:38 p.m. UTC
From: Marcelo Tosatti <mtosatti@redhat.com>

BugLink: http://bugs.launchpad.net/bugs/1494350

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

Which can cause an overflow later (when subtracting from vcpu threads

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>
(cherry picked from commit 7cae2bedcbd4680b155999655e49c27b9cf020fa)
Signed-off-by: Liang Chen <liang.chen@canonical.com>
 arch/x86/kvm/x86.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)
diff mbox


diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 1ab73af..28acfa5 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -2025,6 +2025,8 @@  static void accumulate_steal_time(struct kvm_vcpu *vcpu)
 static void record_steal_time(struct kvm_vcpu *vcpu)
+	accumulate_steal_time(vcpu);
 	if (!(vcpu->arch.st.msr_val & KVM_MSR_ENABLED))
@@ -2157,12 +2159,6 @@  int kvm_set_msr_common(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
 		if (!(data & KVM_MSR_ENABLED))
-		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);
@@ -2859,7 +2855,6 @@  void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
 		vcpu->cpu = cpu;
-	accumulate_steal_time(vcpu);
 	kvm_make_request(KVM_REQ_STEAL_UPDATE, vcpu);