diff options
author | Duncan Sands <baldrick@free.fr> | 2011-08-30 10:58:22 +0200 |
---|---|---|
committer | Avi Kivity <avi@redhat.com> | 2011-08-30 14:42:30 +0300 |
commit | 3b217116edaac634bf31e85c35708298059a8171 (patch) | |
tree | d16ebe3a5ea3cc8b279e60f54e2df804cb754a1c | |
parent | b4ca46e4e82a0a5976fe5eab85be585d75f8202f (diff) | |
download | linux-3b217116edaac634bf31e85c35708298059a8171.tar.bz2 |
KVM: Fix instruction size issue in pvclock scaling
Commit de2d1a524e94 ("KVM: Fix register corruption in pvclock_scale_delta")
introduced a mul instruction that may have only a memory operand; the
assembler therefore cannot select the correct size:
pvclock.s:229: Error: no instruction mnemonic suffix given and no register
operands; can't size instruction
In this example the assembler is:
#APP
mul -48(%rbp) ; shrd $32, %rdx, %rax
#NO_APP
A simple solution is to use mulq.
Signed-off-by: Duncan Sands <baldrick@free.fr>
Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r-- | arch/x86/include/asm/pvclock.h | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index a518c0a45044..c59cc97fe6c1 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h @@ -44,7 +44,7 @@ static inline u64 pvclock_scale_delta(u64 delta, u32 mul_frac, int shift) : "a" ((u32)delta), "1" ((u32)(delta >> 32)), "2" (mul_frac) ); #elif defined(__x86_64__) __asm__ ( - "mul %[mul_frac] ; shrd $32, %[hi], %[lo]" + "mulq %[mul_frac] ; shrd $32, %[hi], %[lo]" : [lo]"=a"(product), [hi]"=d"(tmp) : "0"(delta), |