diff mbox

[19/48] MIPS: Normalise code flow in the CpU exception handler

Message ID
State Accepted
Delegated to: Ralf Baechle
Headers show

Commit Message

Maciej W. Rozycki April 3, 2015, 10:25 p.m. UTC
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 <>
---
linux-mips-cpu-switch.diff
diff mbox

Patch

Index: linux/arch/mips/kernel/traps.c
===================================================================
--- linux.orig/arch/mips/kernel/traps.c	:27: +0100
+++ linux/arch/mips/kernel/traps.c	:27: +0100
@@ -1312,7 +1312,7 @@  asmlinkage void do_cpu(struct pt_regs *r
 		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 *r
 			force_sig(status, current);
 		}
 
-		goto out;
+		break;
 
 	case 3:
 		/*
@@ -1361,8 +1361,10 @@  asmlinkage void do_cpu(struct pt_regs *r
 		 * 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 *r
 				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);
 }