KVM: x86: Make math work for other scales
authorZachary Amsden <zamsden@redhat.com>
Sun, 19 Sep 2010 00:38:13 +0000 (14:38 -1000)
committerAvi Kivity <avi@redhat.com>
Sun, 24 Oct 2010 08:53:04 +0000 (10:53 +0200)
commit5f4e3f882731c65b5d64a2ff743fda96eaebb9ee
tree25d538b6a58066d01711daa505acbabf47aaf125
parent624d84cfe63b5afdd087bf5b2075a8a8cac5c83f
KVM: x86: Make math work for other scales

The math in kvm_get_time_scale relies on the fact that
NSEC_PER_SEC < 2^32.  To use the same function to compute
arbitrary time scales, we must extend the first reduction
step to shrink the base rate to a 32-bit value, and
possibly reduce the scaled rate into a 32-bit as well.

Note we must take care to avoid an arithmetic overflow
when scaling up the tps32 value (this could not happen
with the fixed scaled value of NSEC_PER_SEC, but can
happen with scaled rates above 2^31.

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