KVM: Improve TSC offset matching
authorZachary Amsden <zamsden@gmail.com>
Fri, 3 Feb 2012 17:43:51 +0000 (15:43 -0200)
committerAvi Kivity <avi@redhat.com>
Thu, 8 Mar 2012 12:10:03 +0000 (14:10 +0200)
commit5d3cb0f6a8e3af018a522ae8d36f8f7d2511b5d8
tree4299c77a00d893615ded5f31c6112578edfb3dc3
parentcc578287e3224d0da196cc1d226bdae6b068faa7
KVM: Improve TSC offset matching

There are a few improvements that can be made to the TSC offset
matching code.  First, we don't need to call the 128-bit multiply
(especially on a constant number), the code works much nicer to
do computation in nanosecond units.

Second, the way everything is setup with software TSC rate scaling,
we currently have per-cpu rates.  Obviously this isn't too desirable
to use in practice, but if for some reason we do change the rate of
all VCPUs at runtime, then reset the TSCs, we will only want to
match offsets for VCPUs running at the same rate.

Finally, for the case where we have an unstable host TSC, but
rate scaling is being done in hardware, we should call the platform
code to compute the TSC offset, so the math is reorganized to recompute
the base instead, then transform the base into an offset using the
existing API.

[avi: fix 64-bit division on i386]

Signed-off-by: Zachary Amsden <zamsden@gmail.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
KVM: Fix 64-bit division in kvm_write_tsc()

Breaks i386 build.

Signed-off-by: Avi Kivity <avi@redhat.com>
arch/x86/include/asm/kvm_host.h
arch/x86/kvm/x86.c