aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZachary Amsden <zamsden@redhat.com>2010-08-20 04:07:15 -0400
committerAvi Kivity <avi@redhat.com>2010-10-24 04:51:21 -0400
commitae38436b78a8abff767e2ac10e2cd663a7eef476 (patch)
treed7d68489e99f4673965379a20cf3e14ead9d0814
parent45bf21a8ce7a2884f067a702a5c7683684846ce1 (diff)
KVM: x86: Drop vm_init_tsc
This is used only by the VMX code, and is not done properly; if the TSC is indeed backwards, it is out of sync, and will need proper handling in the logic at each and every CPU change. For now, drop this test during init as misguided. Signed-off-by: Zachary Amsden <zamsden@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r--arch/x86/include/asm/kvm_host.h1
-rw-r--r--arch/x86/kvm/vmx.c10
-rw-r--r--arch/x86/kvm/x86.c2
3 files changed, 3 insertions, 10 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index e01b72825564..6056a23dc4cf 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -394,7 +394,6 @@ struct kvm_arch {
394 gpa_t ept_identity_map_addr; 394 gpa_t ept_identity_map_addr;
395 395
396 unsigned long irq_sources_bitmap; 396 unsigned long irq_sources_bitmap;
397 u64 vm_init_tsc;
398 s64 kvmclock_offset; 397 s64 kvmclock_offset;
399 398
400 struct kvm_xen_hvm_config xen_hvm_config; 399 struct kvm_xen_hvm_config xen_hvm_config;
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 751a2d29f4ce..4fbab2469bf9 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -2512,7 +2512,7 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
2512{ 2512{
2513 u32 host_sysenter_cs, msr_low, msr_high; 2513 u32 host_sysenter_cs, msr_low, msr_high;
2514 u32 junk; 2514 u32 junk;
2515 u64 host_pat, tsc_this, tsc_base; 2515 u64 host_pat, tsc_this;
2516 unsigned long a; 2516 unsigned long a;
2517 struct desc_ptr dt; 2517 struct desc_ptr dt;
2518 int i; 2518 int i;
@@ -2653,12 +2653,8 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
2653 vmx->vcpu.arch.cr4_guest_owned_bits |= X86_CR4_PGE; 2653 vmx->vcpu.arch.cr4_guest_owned_bits |= X86_CR4_PGE;
2654 vmcs_writel(CR4_GUEST_HOST_MASK, ~vmx->vcpu.arch.cr4_guest_owned_bits); 2654 vmcs_writel(CR4_GUEST_HOST_MASK, ~vmx->vcpu.arch.cr4_guest_owned_bits);
2655 2655
2656 tsc_base = vmx->vcpu.kvm->arch.vm_init_tsc; 2656 tsc_this = native_read_tsc();
2657 rdtscll(tsc_this); 2657 guest_write_tsc(0, tsc_this);
2658 if (tsc_this < vmx->vcpu.kvm->arch.vm_init_tsc)
2659 tsc_base = tsc_this;
2660
2661 guest_write_tsc(0, tsc_base);
2662 2658
2663 return 0; 2659 return 0;
2664} 2660}
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 4b4d2836240f..8b0c51a1adaa 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -5495,8 +5495,6 @@ struct kvm *kvm_arch_create_vm(void)
5495 /* Reserve bit 0 of irq_sources_bitmap for userspace irq source */ 5495 /* Reserve bit 0 of irq_sources_bitmap for userspace irq source */
5496 set_bit(KVM_USERSPACE_IRQ_SOURCE_ID, &kvm->arch.irq_sources_bitmap); 5496 set_bit(KVM_USERSPACE_IRQ_SOURCE_ID, &kvm->arch.irq_sources_bitmap);
5497 5497
5498 rdtscll(kvm->arch.vm_init_tsc);
5499
5500 return kvm; 5498 return kvm;
5501} 5499}
5502 5500