diff options
author | Christophe Leroy <christophe.leroy@c-s.fr> | 2017-08-08 13:58:44 +0200 |
---|---|---|
committer | Michael Ellerman <mpe@ellerman.id.au> | 2017-08-10 23:32:04 +1000 |
commit | fbbcc3bb139e044653b47f183ac9189c31895f23 (patch) | |
tree | 8779ece748701e2786dc7ba6425e00fe44aa7885 /arch | |
parent | f70b1e8d17ce93fc963936aee144f54a4530172f (diff) | |
download | linux-fbbcc3bb139e044653b47f183ac9189c31895f23.tar.gz linux-fbbcc3bb139e044653b47f183ac9189c31895f23.tar.bz2 linux-fbbcc3bb139e044653b47f183ac9189c31895f23.zip |
powerpc/8xx: Remove SoftwareEmulation()
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>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/kernel/head_8xx.S | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/traps.c | 18 |
2 files changed, 1 insertions, 19 deletions
diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S index 07ddced6bab3..778a0e11d0e6 100644 --- a/arch/powerpc/kernel/head_8xx.S +++ b/arch/powerpc/kernel/head_8xx.S @@ -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 /* diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index ce10a3cc860f..675d5d2bfcde 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -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) { |