2008-06-25 21:45:53

by Max Asbock

[permalink] [raw]
Subject: [patch] x86: shift bits the right way in native_read_tscp

native_read_tscp shifts the bits in the high order value in the wrong direction,
the attached patch fixes that.

Signed-off-by: Max Asbock <[email protected]>

diff -pburN linux/include/asm-x86/msr.h linux.rdtscp/include/asm-x86/msr.h
--- linux/include/asm-x86/msr.h 2008-06-20 11:51:17.000000000 -0700
+++ linux.rdtscp/include/asm-x86/msr.h 2008-06-25 14:26:35.000000000 -0700
@@ -18,7 +18,7 @@ static inline unsigned long long native_
unsigned long low, high;
asm volatile(".byte 0x0f,0x01,0xf9"
: "=a" (low), "=d" (high), "=c" (*aux));
- return low | ((u64)high >> 32);
+ return low | ((u64)high << 32);
}

/*


---
Max


2008-06-25 21:53:52

by Glauber Costa

[permalink] [raw]
Subject: Re: [patch] x86: shift bits the right way in native_read_tscp

Max Asbock wrote:
> native_read_tscp shifts the bits in the high order value in the wrong direction,
> the attached patch fixes that.
>
> Signed-off-by: Max Asbock <[email protected]>
>
> diff -pburN linux/include/asm-x86/msr.h linux.rdtscp/include/asm-x86/msr.h
> --- linux/include/asm-x86/msr.h 2008-06-20 11:51:17.000000000 -0700
> +++ linux.rdtscp/include/asm-x86/msr.h 2008-06-25 14:26:35.000000000 -0700
> @@ -18,7 +18,7 @@ static inline unsigned long long native_
> unsigned long low, high;
> asm volatile(".byte 0x0f,0x01,0xf9"
> : "=a" (low), "=d" (high), "=c" (*aux));
> - return low | ((u64)high >> 32);
> + return low | ((u64)high << 32);
> }
>
> /*
>
>
> ---
> Max
>
>
uh-oh!

absolutely right

shame on me.