diff options
Diffstat (limited to 'arch/x86')
-rw-r--r-- | arch/x86/kernel/traps.c | 11 |
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 | } |