aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/traps.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-09 21:01:52 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-09 21:01:52 -0500
commitc93ecedab35f5305542a9fe5cfbd37377189589e (patch)
treec480259a0588c1dd47f596e25f6ac805d878bf05 /arch/x86/kernel/traps.c
parent072bc448cc796c4d2d3519795f38e13a6c2a14a5 (diff)
parent7575637ab293861a799f3bbafe0d8c597389f4e9 (diff)
Merge branch 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 fpu updates from Ingo Molnar: "Initial round of kernel_fpu_begin/end cleanups from Oleg Nesterov, plus a cleanup from Borislav Petkov" * 'x86-fpu-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86, fpu: Fix math_state_restore() race with kernel_fpu_begin() x86, fpu: Don't abuse has_fpu in __kernel_fpu_begin/end() x86, fpu: Introduce per-cpu in_kernel_fpu state x86/fpu: Use a symbolic name for asm operand
Diffstat (limited to 'arch/x86/kernel/traps.c')
-rw-r--r--arch/x86/kernel/traps.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index c74f2f5652da..9d2073e2ecc9 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -859,18 +859,16 @@ void math_state_restore(void)
859 local_irq_disable(); 859 local_irq_disable();
860 } 860 }
861 861
862 /* Avoid __kernel_fpu_begin() right after __thread_fpu_begin() */
863 kernel_fpu_disable();
862 __thread_fpu_begin(tsk); 864 __thread_fpu_begin(tsk);
863
864 /*
865 * Paranoid restore. send a SIGSEGV if we fail to restore the state.
866 */
867 if (unlikely(restore_fpu_checking(tsk))) { 865 if (unlikely(restore_fpu_checking(tsk))) {
868 drop_init_fpu(tsk); 866 drop_init_fpu(tsk);
869 force_sig_info(SIGSEGV, SEND_SIG_PRIV, tsk); 867 force_sig_info(SIGSEGV, SEND_SIG_PRIV, tsk);
870 return; 868 } else {
869 tsk->thread.fpu_counter++;
871 } 870 }
872 871 kernel_fpu_enable();
873 tsk->thread.fpu_counter++;
874} 872}
875EXPORT_SYMBOL_GPL(math_state_restore); 873EXPORT_SYMBOL_GPL(math_state_restore);
876 874