From: Christophe Leroy Date: Tue, 30 Apr 2019 12:38:57 +0000 (+0000) Subject: powerpc/fsl_booke: ensure SPEFloatingPointException() reenables interrupts X-Git-Tag: v5.2-rc1~100^2~61 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ef4291243f51d0a69899ee2025de09578c0fcba8;p=thirdparty%2Fkernel%2Flinux.git powerpc/fsl_booke: ensure SPEFloatingPointException() reenables interrupts SPEFloatingPointException() is the only exception handler which 'forgets' to re-enable interrupts. This patch makes sure it does. Suggested-by: Benjamin Herrenschmidt Signed-off-by: Christophe Leroy Signed-off-by: Michael Ellerman --- diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index 1fd45a8650e17..665f294725cb2 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -2088,6 +2088,10 @@ void SPEFloatingPointException(struct pt_regs *regs) int code = FPE_FLTUNK; int err; + /* We restore the interrupt state now */ + if (!arch_irq_disabled_regs(regs)) + local_irq_enable(); + flush_spe_to_thread(current); spefscr = current->thread.spefscr; @@ -2133,6 +2137,10 @@ void SPEFloatingPointRoundException(struct pt_regs *regs) extern int speround_handler(struct pt_regs *regs); int err; + /* We restore the interrupt state now */ + if (!arch_irq_disabled_regs(regs)) + local_irq_enable(); + preempt_disable(); if (regs->msr & MSR_SPE) giveup_spe(current);