Commit 27e28e8e authored by Maciej W. Rozycki's avatar Maciej W. Rozycki Committed by Ralf Baechle

MIPS: Normalise code flow in the CpU exception handler

Changes applied to `do_cpu' over time reduced the use of the SIGILL
issued with `force_sig' at the end to a single CU3 case only in the
switch statement there.  Move that `force_sig' call over to right where
required then and toss out the pile of gotos now not needed to skip over
the call, replacing them with regular breaks out of the switch.
Signed-off-by: default avatarMaciej W. Rozycki <macro@linux-mips.org>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/9683/Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
parent d4f5b088
...@@ -1312,7 +1312,7 @@ asmlinkage void do_cpu(struct pt_regs *regs) ...@@ -1312,7 +1312,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
status = -1; status = -1;
if (unlikely(compute_return_epc(regs) < 0)) if (unlikely(compute_return_epc(regs) < 0))
goto out; break;
if (get_isa16_mode(regs->cp0_epc)) { if (get_isa16_mode(regs->cp0_epc)) {
unsigned short mmop[2] = { 0 }; unsigned short mmop[2] = { 0 };
...@@ -1345,7 +1345,7 @@ asmlinkage void do_cpu(struct pt_regs *regs) ...@@ -1345,7 +1345,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
force_sig(status, current); force_sig(status, current);
} }
goto out; break;
case 3: case 3:
/* /*
...@@ -1361,8 +1361,10 @@ asmlinkage void do_cpu(struct pt_regs *regs) ...@@ -1361,8 +1361,10 @@ asmlinkage void do_cpu(struct pt_regs *regs)
* erroneously too, so they are covered by this choice * erroneously too, so they are covered by this choice
* as well. * as well.
*/ */
if (raw_cpu_has_fpu) if (raw_cpu_has_fpu) {
force_sig(SIGILL, current);
break; break;
}
/* Fall through. */ /* Fall through. */
case 1: case 1:
...@@ -1378,16 +1380,13 @@ asmlinkage void do_cpu(struct pt_regs *regs) ...@@ -1378,16 +1380,13 @@ asmlinkage void do_cpu(struct pt_regs *regs)
mt_ase_fp_affinity(); mt_ase_fp_affinity();
} }
goto out; break;
case 2: case 2:
raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs); raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs);
goto out; break;
} }
force_sig(SIGILL, current);
out:
exception_exit(prev_state); exception_exit(prev_state);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment