x86/fpu changes for v2.6.38
Linus,
Please pull the latest x86-fpu-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-fpu-for-linus
Thanks,
Ingo
------------------>
H. Peter Anvin (1):
x86-64, asm: Use fxsaveq/fxrestorq in more places
arch/x86/include/asm/i387.h | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-)
arch/x86/include/asm/i387.h +24 -0
@@ -93,6 +93,17 @@ static inline int fxrstor_checking(struct i387_fxsave_struct *fx)int err;/* See comment in fxsave() below. */ +#ifdef CONFIG_AS_FXSAVEQ + asmvolatile ("1: fxrstorq %[fx]\n\t" +"2:\n" +".section .fixup,\"ax\"\n" +"3: movl $-1,%[err]\n" +" jmp 2b\n" +".previous\n" + _ASM_EXTABLE(1b, 3b) + : [err] "=r" (err) + : [fx] "m" (*fx), "0" (0)); +#else asmvolatile ("1: rex64/fxrstor (%[fx])\n\t" "2:\n" ".section .fixup,\"ax\"\n"
@@ -102,6 +113,7 @@ static inline int fxrstor_checking(struct i387_fxsave_struct *fx)_ASM_EXTABLE (1b ,3b ) : [err] "=r" (err) : [fx] "R" (fx), "m" (*fx), "0" (0)); +#endif return err; }
@@ -119,6 +131,17 @@ static inline int fxsave_user(struct i387_fxsave_struct __user *fx)return -EFAULT ;/* See comment in fxsave() below. */ +#ifdef CONFIG_AS_FXSAVEQ + asmvolatile ("1: fxsaveq %[fx]\n\t" +"2:\n" +".section .fixup,\"ax\"\n" +"3: movl $-1,%[err]\n" +" jmp 2b\n" +".previous\n" + _ASM_EXTABLE(1b, 3b) + : [err] "=r" (err), [fx] "=m" (*fx) + : "0" (0)); +#else asmvolatile ("1: rex64/fxsave (%[fx])\n\t" "2:\n" ".section .fixup,\"ax\"\n"
@@ -128,6 +151,7 @@ static inline int fxsave_user(struct i387_fxsave_struct __user *fx)_ASM_EXTABLE (1b ,3b ) : [err] "=r" (err), "=m" (*fx) : [fx] "R" (fx), "0" (0)); +#endif if (unlikely (err) &&__clear_user (fx,sizeof (struct i387_fxsave_struct ))) err = -EFAULT ;