mirror of https://github.com/proxmox/mirror_qemu
kvmclock: fix clock_is_reliable on migration from QEMU < 2.9
When migrating from a pre-2.9 QEMU, no clock_is_reliable flag is transferred. We should assume that the source host has an unreliable KVM_GET_CLOCK, rather than using whatever was determined locally, to ensure that any drift from the TSC-based value calculated by the guest is corrected. Signed-off-by: Michael Chapman <mike@very.puzzling.org> Message-Id: <20180406053406.774-1-mike@very.puzzling.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>master
parent
4968a2c6ed
commit
c2b01cfec1
|
@ -241,6 +241,19 @@ static const VMStateDescription kvmclock_reliable_get_clock = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When migrating, assume the source has an unreliable
|
||||||
|
* KVM_GET_CLOCK unless told otherwise.
|
||||||
|
*/
|
||||||
|
static int kvmclock_pre_load(void *opaque)
|
||||||
|
{
|
||||||
|
KVMClockState *s = opaque;
|
||||||
|
|
||||||
|
s->clock_is_reliable = false;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When migrating, read the clock just before migration,
|
* When migrating, read the clock just before migration,
|
||||||
* so that the guest clock counts during the events
|
* so that the guest clock counts during the events
|
||||||
|
@ -268,6 +281,7 @@ static const VMStateDescription kvmclock_vmsd = {
|
||||||
.name = "kvmclock",
|
.name = "kvmclock",
|
||||||
.version_id = 1,
|
.version_id = 1,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 1,
|
||||||
|
.pre_load = kvmclock_pre_load,
|
||||||
.pre_save = kvmclock_pre_save,
|
.pre_save = kvmclock_pre_save,
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
VMSTATE_UINT64(clock, KVMClockState),
|
VMSTATE_UINT64(clock, KVMClockState),
|
||||||
|
|
Loading…
Reference in New Issue