|
@@ -765,14 +765,16 @@ static void svm_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
|
if (unlikely(cpu != vcpu->cpu)) {
|
|
if (unlikely(cpu != vcpu->cpu)) {
|
|
u64 delta;
|
|
u64 delta;
|
|
|
|
|
|
- /*
|
|
|
|
- * Make sure that the guest sees a monotonically
|
|
|
|
- * increasing TSC.
|
|
|
|
- */
|
|
|
|
- delta = vcpu->arch.host_tsc - native_read_tsc();
|
|
|
|
- svm->vmcb->control.tsc_offset += delta;
|
|
|
|
- if (is_nested(svm))
|
|
|
|
- svm->nested.hsave->control.tsc_offset += delta;
|
|
|
|
|
|
+ if (check_tsc_unstable()) {
|
|
|
|
+ /*
|
|
|
|
+ * Make sure that the guest sees a monotonically
|
|
|
|
+ * increasing TSC.
|
|
|
|
+ */
|
|
|
|
+ delta = vcpu->arch.host_tsc - native_read_tsc();
|
|
|
|
+ svm->vmcb->control.tsc_offset += delta;
|
|
|
|
+ if (is_nested(svm))
|
|
|
|
+ svm->nested.hsave->control.tsc_offset += delta;
|
|
|
|
+ }
|
|
vcpu->cpu = cpu;
|
|
vcpu->cpu = cpu;
|
|
kvm_migrate_timers(vcpu);
|
|
kvm_migrate_timers(vcpu);
|
|
svm->asid_generation = 0;
|
|
svm->asid_generation = 0;
|