• Paolo Bonzini's avatar
    KVM: x86: use raw clock values consistently · 8171cd68
    Paolo Bonzini authored
    Commit 53fafdbb ("KVM: x86: switch KVMCLOCK base to monotonic raw
    clock") changed kvmclock to use tkr_raw instead of tkr_mono.  However,
    the default kvmclock_offset for the VM was still based on the monotonic
    clock and, if the raw clock drifted enough from the monotonic clock,
    this could cause a negative system_time to be written to the guest's
    struct pvclock.  RHEL5 does not like it and (if it boots fast enough to
    observe a negative time value) it hangs.
    
    There is another thing to be careful about: getboottime64 returns the
    host boot time with tkr_mono frequency, and subtracting the tkr_raw-based
    kvmclock value will cause the wallclock to be off if tkr_raw drifts
    from tkr_mono.  To avoid this, compute the wallclock delta from the
    current time instead of being clever and using getboottime64.
    
    Fixes: 53fafdbb ("KVM: x86: switch KVMCLOCK base to monotonic raw clock")
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    8171cd68
x86.c 273 KB