diff options
author | Zachary Amsden <zamsden@redhat.com> | 2010-08-20 04:07:24 -0400 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2010-10-24 04:51:23 -0400 |
commit | 48434c20e18d59001469699fcaaf9cf30b815a20 (patch) | |
tree | 8c7f91598f3ea56550e86599c18b3e0b7daf6361 /arch/x86/kvm/x86.c | |
parent | e48672fa25e879f7ae21785c7efd187738139593 (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.c | 2 |
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; |