KVM: x86: Fix a possible backwards warp of kvmclock
authorZachary Amsden <zamsden@redhat.com>
Fri, 20 Aug 2010 08:07:30 +0000 (22:07 -1000)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:51:24 +0000 (10:51 +0200)
commit1d5f066e0b63271b67eac6d3752f8aa96adcbddb
treeb3ba7c2783edbc6d9e6658d91e991913ba264684
parent347bb4448c2155eb2310923ccaa4be5677649003
KVM: x86: Fix a possible backwards warp of kvmclock

Kernel time, which advances in discrete steps may progress much slower
than TSC.  As a result, when kvmclock is adjusted to a new base, the
apparent time to the guest, which runs at a much higher, nsec scaled
rate based on the current TSC, may have already been observed to have
a larger value (kernel_ns + scaled tsc) than the value to which we are
setting it (kernel_ns + 0).

We must instead compute the clock as potentially observed by the guest
for kernel_ns to make sure it does not go backwards.

Signed-off-by: Zachary Amsden <zamsden@redhat.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c