@@ -966,7 +966,15 @@ void kvm_arch_load_regs(CPUState *env, int level)
}
#endif
if (level == KVM_PUT_FULL_STATE) {
- set_msr_entry(&msrs[n++], MSR_IA32_TSC, env->tsc);
+ /*
+ * KVM is yet unable to synchronize TSC values of multiple VCPUs on
+ * writeback. Until this is fixed, we only write the offset to SMP
+ * guests after migration, desynchronizing the VCPUs, but avoiding
+ * huge jump-backs that would occur without any writeback at all.
+ */
+ if (smp_cpus == 1 || env->tsc != 0) {
+ set_msr_entry(&msrs[n++], MSR_IA32_TSC, env->tsc);
+ }
set_msr_entry(&msrs[n++], MSR_KVM_SYSTEM_TIME, env->system_time_msr);
set_msr_entry(&msrs[n++], MSR_KVM_WALL_CLOCK, env->wall_clock_msr);
}