Home Home > GIT Browse > SLE11-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Suchanek <msuchanek@suse.de>2018-12-17 12:40:20 +0100
committerMichal Suchanek <msuchanek@suse.de>2018-12-17 12:40:20 +0100
commit9a4666395157a1acb51e85b382a7247963ac9925 (patch)
tree94d41856b76f20ab2f6cffcd22753f152d5d31ca
parentf1d2650a6196b974f710c545c807c268a6d17784 (diff)
powerpc/traps: restore recoverability of machine_check
interrupts (bsc#1094244).
-rw-r--r--patches.arch/powerpc-traps-restore-recoverability-of-machine_chec.patch56
-rw-r--r--series.conf1
2 files changed, 57 insertions, 0 deletions
diff --git a/patches.arch/powerpc-traps-restore-recoverability-of-machine_chec.patch b/patches.arch/powerpc-traps-restore-recoverability-of-machine_chec.patch
new file mode 100644
index 0000000000..a73cb87aaf
--- /dev/null
+++ b/patches.arch/powerpc-traps-restore-recoverability-of-machine_chec.patch
@@ -0,0 +1,56 @@
+From daf00ae71dad8aa05965713c62558aeebf2df48e Mon Sep 17 00:00:00 2001
+From: Christophe Leroy <christophe.leroy@c-s.fr>
+Date: Sat, 13 Oct 2018 09:16:22 +0000
+Subject: [PATCH] powerpc/traps: restore recoverability of machine_check
+ interrupts
+
+References: bsc#1094244
+Patch-mainline: v4.20-rc1
+Git-commit: daf00ae71dad8aa05965713c62558aeebf2df48e
+
+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>
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Acked-by: Michal Suchanek <msuchanek@suse.de>
+---
+ 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 f1629a8acc4b..47904cd1ff46 100644
+--- a/arch/powerpc/kernel/traps.c
++++ b/arch/powerpc/kernel/traps.c
+@@ -763,12 +763,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();
+--
+2.19.2
+
diff --git a/series.conf b/series.conf
index ebf0cb0da5..4ad27ab038 100644
--- a/series.conf
+++ b/series.conf
@@ -1338,6 +1338,7 @@
patches.arch/powerpc-64s-Fix-compiler-store-ordering-to-SLB-shado.patch
patches.arch/powerpc-mm-hash-Add-missing-isync-prior-to-kernel-st.patch
patches.arch/powerpc-Machine-check-interrupt-is-a-non-maskable-in.patch
+ patches.arch/powerpc-traps-restore-recoverability-of-machine_chec.patch
# bsc#1076905
patches.arch/powerpc-Fix-register-clobbering-when-accumulating-st.patch