powerpc/8xx: Remove SoftwareEmulation()
authorChristophe Leroy <christophe.leroy@c-s.fr>
Tue, 8 Aug 2017 11:58:44 +0000 (13:58 +0200)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 10 Aug 2017 13:32:04 +0000 (23:32 +1000)
Since commit aa42c69c67f82 ("[POWERPC] Add support for FP emulation
for the e300c2 core"), program_check_exception() can be called for
math emulation. In that case, 'reason' is 0.

On the 8xx, there is a Software Emulation interrupt which is
called for all unimplemented and illegal instructions. This
interrupt calls SoftwareEmulation() which does almost the
same as program_check_exception() called with reason = 0.

The Software Emulation interrupt sets all reason bits to 0,
it is therefore possible to call program_check_exception()
directly from the interrupt handler.

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/head_8xx.S
arch/powerpc/kernel/traps.c

index 07ddced6bab3b840c935df57e4d1cd06c794d83f..778a0e11d0e6c0a8d6b0c403fb7fa2c69d4d195e 100644 (file)
@@ -300,7 +300,7 @@ SystemCall:
 /* On the MPC8xx, this is a software emulation interrupt.  It occurs
  * for all unimplemented and illegal instructions.
  */
-       EXCEPTION(0x1000, SoftEmu, SoftwareEmulation, EXC_XFER_STD)
+       EXCEPTION(0x1000, SoftEmu, program_check_exception, EXC_XFER_STD)
 
        . = 0x1100
 /*
index ce10a3cc860f24c425ad99063508c6dc2a460e9f..675d5d2bfcdefa44bda2ee6553188bfd6b6f7e6b 100644 (file)
@@ -1522,24 +1522,6 @@ void performance_monitor_exception(struct pt_regs *regs)
        perf_irq(regs);
 }
 
-#ifdef CONFIG_8xx
-void SoftwareEmulation(struct pt_regs *regs)
-{
-       CHECK_FULL_REGS(regs);
-
-       if (!user_mode(regs)) {
-               debugger(regs);
-               die("Kernel Mode Unimplemented Instruction or SW FPU Emulation",
-                       regs, SIGFPE);
-       }
-
-       if (!emulate_math(regs))
-               return;
-
-       _exception(SIGILL, regs, ILL_ILLOPC, regs->nip);
-}
-#endif /* CONFIG_8xx */
-
 #ifdef CONFIG_PPC_ADV_DEBUG_REGS
 static void handle_debug(struct pt_regs *regs, unsigned long debug_status)
 {