]> git.hungrycats.org Git - linux/commitdiff
KVM: x86: Move TSC reset out of vmcb_init
authorZachary Amsden <zamsden@redhat.com>
Fri, 20 Aug 2010 08:07:19 +0000 (22:07 -1000)
committerPaul Gortmaker <paul.gortmaker@windriver.com>
Thu, 6 Jan 2011 23:08:22 +0000 (18:08 -0500)
commit 47008cd887c1836bcadda123ba73e1863de7a6c4 upstream.

The VMCB is reset whenever we receive a startup IPI, so Linux is setting
TSC back to zero happens very late in the boot process and destabilizing
the TSC.  Instead, just set TSC to zero once at VCPU creation time.

Why the separate patch?  So git-bisect is your friend.

Signed-off-by: Zachary Amsden <zamsden@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
arch/x86/kvm/svm.c

index 508e1362032cc0b7a004444c97886e9f57f1f838..80453d462a6cf49afc6688b5032c666eb4522c8b 100644 (file)
@@ -632,7 +632,6 @@ static void init_vmcb(struct vcpu_svm *svm)
 
        control->iopm_base_pa = iopm_base;
        control->msrpm_base_pa = __pa(svm->msrpm);
-       control->tsc_offset = 0-native_read_tsc();
        control->int_ctl = V_INTR_MASKING_MASK;
 
        init_seg(&save->es);
@@ -766,6 +765,7 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
        svm->vmcb_pa = page_to_pfn(page) << PAGE_SHIFT;
        svm->asid_generation = 0;
        init_vmcb(svm);
+       svm->vmcb->control.tsc_offset = 0-native_read_tsc();
 
        fx_init(&svm->vcpu);
        svm->vcpu.arch.apic_base = 0xfee00000 | MSR_IA32_APICBASE_ENABLE;