aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/traps.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
index f37cee75ab58..f5a640ba04bc 100644
--- a/arch/x86/kernel/traps.c
+++ b/arch/x86/kernel/traps.c
@@ -689,12 +689,7 @@ void math_error(void __user *ip)
689 cwd = get_fpu_cwd(task); 689 cwd = get_fpu_cwd(task);
690 swd = get_fpu_swd(task); 690 swd = get_fpu_swd(task);
691 691
692 err = swd & ~cwd & 0x3f; 692 err = swd & ~cwd;
693
694#ifdef CONFIG_X86_32
695 if (!err)
696 return;
697#endif
698 693
699 if (err & 0x001) { /* Invalid op */ 694 if (err & 0x001) { /* Invalid op */
700 /* 695 /*
@@ -712,7 +707,9 @@ void math_error(void __user *ip)
712 } else if (err & 0x020) { /* Precision */ 707 } else if (err & 0x020) { /* Precision */
713 info.si_code = FPE_FLTRES; 708 info.si_code = FPE_FLTRES;
714 } else { 709 } else {
715 info.si_code = __SI_FAULT|SI_KERNEL; /* WTF? */ 710 /* If we're using IRQ 13, or supposedly even some trap 16
711 implementations, it's possible we get a spurious trap... */
712 return; /* Spurious trap, no error */
716 } 713 }
717 force_sig_info(SIGFPE, &info, task); 714 force_sig_info(SIGFPE, &info, task);
718} 715}