[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86/time: fix scale_delta() inline assembly


  • To: Jan Beulich <JBeulich@xxxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxx>
  • From: Keir Fraser <keir@xxxxxxx>
  • Date: Mon, 26 Nov 2012 16:10:53 +0000
  • Delivery-date: Mon, 26 Nov 2012 16:11:23 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>
  • Thread-index: Ac3L8JvLaGwWpI2GKkWdDCw99VvpHQ==
  • Thread-topic: [Xen-devel] [PATCH] x86/time: fix scale_delta() inline assembly

On 26/11/2012 15:23, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:

> The way it was coded, it clobbered %rdx without telling the compiler.
> This generally didn't cause any problems except when there are two back
> to back invocations (as in plt_overflow()), as in that case the
> compiler may validly assume that it can re-use for the second instance
> the value loaded into %rdx before the first one.
> 
> Once at it, also properly relax the second operand of "mul" (there's no
> need for it to be in %rdx, or a register at all), and switch away from
> using explicit register names in the instruction operands.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Ugh. Thank you very much, Jan! What a horrible bug.

Acked-by: Keir Fraser <keir@xxxxxxx>

> --- a/xen/arch/x86/time.c
> +++ b/xen/arch/x86/time.c
> @@ -127,8 +127,9 @@ static inline u64 scale_delta(u64 delta,
>          delta <<= scale->shift;
>  
>      asm (
> -        "mul %%rdx ; shrd $32,%%rdx,%%rax"
> -        : "=a" (product) : "0" (delta), "d" ((u64)scale->mul_frac) );
> +        "mul %2 ; shrd $32,%1,%0"
> +        : "=a" (product), "=d" (delta)
> +        : "rm" (delta), "0" ((u64)scale->mul_frac) );
>  
>      return product;
>  }
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.