Cc: stable@vger.kernel.org stable@vger.kernel.org
Le 13/10/2018 à 11:16, Christophe Leroy a écrit :
commit b96672dd840f ("powerpc: Machine check interrupt is a non- maskable interrupt") added a call to nmi_enter() at the beginning of machine check restart exception handler. Due to that, in_interrupt() always returns true regardless of the state before entering the exception, and die() panics even when the system was not already in interrupt.
This patch calls nmi_exit() before calling die() in order to restore the interrupt state we had before calling nmi_enter()
Fixes: b96672dd840f ("powerpc: Machine check interrupt is a non-maskable interrupt") Signed-off-by: Christophe Leroy christophe.leroy@c-s.fr
arch/powerpc/kernel/traps.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c index fd58749b4d6b..4f880c2a6e4c 100644 --- a/arch/powerpc/kernel/traps.c +++ b/arch/powerpc/kernel/traps.c @@ -765,12 +765,17 @@ void machine_check_exception(struct pt_regs *regs) if (check_io_access(regs)) goto bail;
- die("Machine check", regs, SIGBUS);
- /* Must die if the interrupt is not recoverable */ if (!(regs->msr & MSR_RI)) nmi_panic(regs, "Unrecoverable Machine check");
- if (!nested)
nmi_exit();
- die("Machine check", regs, SIGBUS);
- return;
- bail: if (!nested) nmi_exit();
On Mon, 15 Oct 2018 09:40:50 +0200 Christophe LEROY christophe.leroy@c-s.fr wrote:
Cc: stable@vger.kernel.org stable@vger.kernel.org
Le 13/10/2018 à 11:16, Christophe Leroy a écrit :
commit b96672dd840f ("powerpc: Machine check interrupt is a non- maskable interrupt") added a call to nmi_enter() at the beginning of machine check restart exception handler. Due to that, in_interrupt() always returns true regardless of the state before entering the exception, and die() panics even when the system was not already in interrupt.
This patch calls nmi_exit() before calling die() in order to restore the interrupt state we had before calling nmi_enter()
Fixes: b96672dd840f ("powerpc: Machine check interrupt is a non-maskable interrupt") Signed-off-by: Christophe Leroy christophe.leroy@c-s.fr
Reviewed-by: Nicholas Piggin npiggin@gmail.com
This looks good to me and probably the simplest fix.
powernv will need a fix on top of this, to remove the die and let it just fall through unrecovered to the traps.c code. pseries seems to be okay. But this patch looks good.
Thanks, Nick
linux-stable-mirror@lists.linaro.org