aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
authorZachary Amsden <zamsden@redhat.com>2010-08-20 04:07:24 -0400
committerAvi Kivity <avi@redhat.com>2010-10-24 04:51:23 -0400
commit48434c20e18d59001469699fcaaf9cf30b815a20 (patch)
tree8c7f91598f3ea56550e86599c18b3e0b7daf6361 /arch/x86/kvm/x86.c
parente48672fa25e879f7ae21785c7efd187738139593 (diff)
KVM: x86: Fix deep C-state TSC desynchronization
When CPUs with unstable TSCs enter deep C-state, TSC may stop running. This causes us to require resynchronization. Since we can't tell when this may potentially happen, we assume the worst by forcing re-compensation for it at every point the VCPU task is descheduled. Signed-off-by: Zachary Amsden <zamsden@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 468fafaed1ae..9396b3f2c594 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1866,7 +1866,7 @@ void kvm_arch_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
1866 } 1866 }
1867 1867
1868 kvm_x86_ops->vcpu_load(vcpu, cpu); 1868 kvm_x86_ops->vcpu_load(vcpu, cpu);
1869 if (unlikely(vcpu->cpu != cpu)) { 1869 if (unlikely(vcpu->cpu != cpu) || check_tsc_unstable()) {
1870 /* Make sure TSC doesn't go backwards */ 1870 /* Make sure TSC doesn't go backwards */
1871 s64 tsc_delta = !vcpu->arch.last_host_tsc ? 0 : 1871 s64 tsc_delta = !vcpu->arch.last_host_tsc ? 0 :
1872 native_read_tsc() - vcpu->arch.last_host_tsc; 1872 native_read_tsc() - vcpu->arch.last_host_tsc;