diff options
| -rw-r--r-- | arch/x86_64/kernel/traps.c | 9 |
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 */ |
