فهرست منبع

KVM: x86: Move TSC reset out of vmcb_init

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>
Zachary Amsden 15 سال پیش
والد
کامیت
47008cd887
1فایلهای تغییر یافته به همراه1 افزوده شده و 1 حذف شده
  1. 1 1
      arch/x86/kvm/svm.c

+ 1 - 1
arch/x86/kvm/svm.c

@@ -766,7 +766,6 @@ static void init_vmcb(struct vcpu_svm *svm)
 
 
 	control->iopm_base_pa = iopm_base;
 	control->iopm_base_pa = iopm_base;
 	control->msrpm_base_pa = __pa(svm->msrpm);
 	control->msrpm_base_pa = __pa(svm->msrpm);
-	control->tsc_offset = 0-native_read_tsc();
 	control->int_ctl = V_INTR_MASKING_MASK;
 	control->int_ctl = V_INTR_MASKING_MASK;
 
 
 	init_seg(&save->es);
 	init_seg(&save->es);
@@ -902,6 +901,7 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
 	svm->vmcb_pa = page_to_pfn(page) << PAGE_SHIFT;
 	svm->vmcb_pa = page_to_pfn(page) << PAGE_SHIFT;
 	svm->asid_generation = 0;
 	svm->asid_generation = 0;
 	init_vmcb(svm);
 	init_vmcb(svm);
+	svm->vmcb->control.tsc_offset = 0-native_read_tsc();
 
 
 	err = fx_init(&svm->vcpu);
 	err = fx_init(&svm->vcpu);
 	if (err)
 	if (err)