diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2016-01-22 13:39:22 +0300 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-02-09 15:24:37 +0300 |
commit | b51012deb390528d89d426f328d84618683f5d73 (patch) | |
tree | 7c1b7c78064df33f353c5875e645ebf1fe381190 /arch/x86/kvm/x86.c | |
parent | 765bdb406de4b6132e349c5d4e077866536a9cc0 (diff) | |
download | linux-b51012deb390528d89d426f328d84618683f5d73.tar.xz |
KVM: x86: introduce do_shl32_div32
This is similar to the existing div_frac function, but it returns the
remainder too. Unlike div_frac, it can be used to implement long
division, e.g. (a << 64) / b for 32-bit a and b.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index 4244c2baf57d..5b937fdebc66 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -1196,14 +1196,8 @@ static void kvm_write_wall_clock(struct kvm *kvm, gpa_t wall_clock) static uint32_t div_frac(uint32_t dividend, uint32_t divisor) { - uint32_t quotient, remainder; - - /* Don't try to replace with do_div(), this one calculates - * "(dividend << 32) / divisor" */ - __asm__ ( "divl %4" - : "=a" (quotient), "=d" (remainder) - : "0" (0), "1" (dividend), "r" (divisor) ); - return quotient; + do_shl32_div32(dividend, divisor); + return dividend; } static void kvm_get_time_scale(uint32_t scaled_khz, uint32_t base_khz, |