mirror of https://gitee.com/openkylin/qemu.git
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>
This commit is contained in:
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,
|
||||
* so that the guest clock counts during the events
|
||||
|
@ -268,6 +281,7 @@ static const VMStateDescription kvmclock_vmsd = {
|
|||
.name = "kvmclock",
|
||||
.version_id = 1,
|
||||
.minimum_version_id = 1,
|
||||
.pre_load = kvmclock_pre_load,
|
||||
.pre_save = kvmclock_pre_save,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_UINT64(clock, KVMClockState),
|
||||
|
|
Loading…
Reference in New Issue