@@ -121,14 +121,6 @@ static void kvmclock_vm_state_change(void *opaque, int running,
pvclock_via_mem = kvmclock_current_nsec(s);
}
- /* migration/savevm/init restore
- * update clock_is_reliable to match local
- * host capabilities.
- */
- if (s->clock_valid == false) {
- s->clock_is_reliable = kvm_has_adjust_clock_stable();
- }
-
/* We can't rely on the saved clock value, just discard it */
if (pvclock_via_mem) {
s->clock = pvclock_via_mem;
@@ -164,6 +156,10 @@ static void kvmclock_vm_state_change(void *opaque, int running,
kvm_synchronize_all_tsc();
s->clock = kvm_get_clock();
+ /* any code that sets s->clock needs to ensure clock_is_reliable
+ * is correctly set.
+ */
+ s->clock_is_reliable = kvm_has_adjust_clock_stable();
/*
* If the VM is stopped, declare the clock state valid to
* avoid re-reading it on next vmsave (which would return
@@ -177,10 +173,6 @@ static void kvmclock_realize(DeviceState *dev, Error **errp)
{
KVMClockState *s = KVM_CLOCK(dev);
- if (kvm_has_adjust_clock_stable()) {
- s->clock_is_reliable = true;
- }
-
qemu_add_vm_change_state_handler(kvmclock_vm_state_change, s);
}