aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86_64/kernel/traps.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c
index 64a59cb49411..77658f7f4e84 100644
--- a/arch/x86_64/kernel/traps.c
+++ b/arch/x86_64/kernel/traps.c
@@ -795,13 +795,16 @@ asmlinkage void do_coprocessor_error(struct pt_regs *regs)
795 */ 795 */
796 cwd = get_fpu_cwd(task); 796 cwd = get_fpu_cwd(task);
797 swd = get_fpu_swd(task); 797 swd = get_fpu_swd(task);
798 switch (((~cwd) & swd & 0x3f) | (swd & 0x240)) { 798 switch (swd & ~cwd & 0x3f) {
799 case 0x000: 799 case 0x000:
800 default: 800 default:
801 break; 801 break;
802 case 0x001: /* Invalid Op */ 802 case 0x001: /* Invalid Op */
803 case 0x041: /* Stack Fault */ 803 /*
804 case 0x241: /* Stack Fault | Direction */ 804 * swd & 0x240 == 0x040: Stack Underflow
805 * swd & 0x240 == 0x240: Stack Overflow
806 * User must clear the SF bit (0x40) if set
807 */
805 info.si_code = FPE_FLTINV; 808 info.si_code = FPE_FLTINV;
806 break; 809 break;
807 case 0x002: /* Denormalize */ 810 case 0x002: /* Denormalize */