|
@@ -834,16 +834,18 @@ static void math_error(struct pt_regs *regs, int error_code, int trapnr)
|
|
|
char *str = (trapnr == X86_TRAP_MF) ? "fpu exception" :
|
|
|
"simd exception";
|
|
|
|
|
|
- if (notify_die(DIE_TRAP, str, regs, error_code, trapnr, SIGFPE) == NOTIFY_STOP)
|
|
|
- return;
|
|
|
cond_local_irq_enable(regs);
|
|
|
|
|
|
if (!user_mode(regs)) {
|
|
|
- if (!fixup_exception(regs, trapnr)) {
|
|
|
- task->thread.error_code = error_code;
|
|
|
- task->thread.trap_nr = trapnr;
|
|
|
+ if (fixup_exception(regs, trapnr))
|
|
|
+ return;
|
|
|
+
|
|
|
+ task->thread.error_code = error_code;
|
|
|
+ task->thread.trap_nr = trapnr;
|
|
|
+
|
|
|
+ if (notify_die(DIE_TRAP, str, regs, error_code,
|
|
|
+ trapnr, SIGFPE) != NOTIFY_STOP)
|
|
|
die(str, regs, error_code);
|
|
|
- }
|
|
|
return;
|
|
|
}
|
|
|
|