Commit c2b01cfe authored by Michael Chapman's avatar Michael Chapman Committed by Paolo Bonzini
Browse files

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: default avatarMichael Chapman <mike@very.puzzling.org>
Message-Id: <20180406053406.774-1-mike@very.puzzling.org>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 4968a2c6
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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),