mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-19 10:14:23 +08:00
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: Maciej W. Rozycki <macro@linux-mips.org> Cc: linux-mips@linux-mips.org Patchwork: https://patchwork.linux-mips.org/patch/9683/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
parent
d4f5b08893
commit
27e28e8ec4
@ -1312,7 +1312,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
||||
status = -1;
|
||||
|
||||
if (unlikely(compute_return_epc(regs) < 0))
|
||||
goto out;
|
||||
break;
|
||||
|
||||
if (get_isa16_mode(regs->cp0_epc)) {
|
||||
unsigned short mmop[2] = { 0 };
|
||||
@ -1345,7 +1345,7 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
||||
force_sig(status, current);
|
||||
}
|
||||
|
||||
goto out;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/*
|
||||
@ -1361,8 +1361,10 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
||||
* erroneously too, so they are covered by this choice
|
||||
* as well.
|
||||
*/
|
||||
if (raw_cpu_has_fpu)
|
||||
if (raw_cpu_has_fpu) {
|
||||
force_sig(SIGILL, current);
|
||||
break;
|
||||
}
|
||||
/* Fall through. */
|
||||
|
||||
case 1:
|
||||
@ -1378,16 +1380,13 @@ asmlinkage void do_cpu(struct pt_regs *regs)
|
||||
mt_ase_fp_affinity();
|
||||
}
|
||||
|
||||
goto out;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
raw_notifier_call_chain(&cu2_chain, CU2_EXCEPTION, regs);
|
||||
goto out;
|
||||
break;
|
||||
}
|
||||
|
||||
force_sig(SIGILL, current);
|
||||
|
||||
out:
|
||||
exception_exit(prev_state);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user