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>
This commit is contained in:
committed by
Avi Kivity
parent
347bb4448c
commit
1d5f066e0b
@ -339,6 +339,8 @@ struct kvm_vcpu_arch {
|
||||
unsigned int time_offset;
|
||||
struct page *time_page;
|
||||
u64 last_host_tsc;
|
||||
u64 last_guest_tsc;
|
||||
u64 last_kernel_ns;
|
||||
|
||||
bool nmi_pending;
|
||||
bool nmi_injected;
|
||||
|
Reference in New Issue
Block a user