summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/mce.c
diff options
context:
space:
mode:
authorNicholas Piggin2019-02-26 09:51:07 +0100
committerMichael Ellerman2019-02-26 13:28:24 +0100
commitccd477028a202993b9ddca5d2404fdaca3b7a55c (patch)
tree075f65a46de61f8f45856cd0bf8fa71e85b9262c /arch/powerpc/kernel/mce.c
parentpowerpc/mm/hash: Handle mmap_min_addr correctly in get_unmapped_area topdown ... (diff)
downloadkernel-qcow2-linux-ccd477028a202993b9ddca5d2404fdaca3b7a55c.tar.gz
kernel-qcow2-linux-ccd477028a202993b9ddca5d2404fdaca3b7a55c.tar.xz
kernel-qcow2-linux-ccd477028a202993b9ddca5d2404fdaca3b7a55c.zip
powerpc/64s: Fix HV NMI vs HV interrupt recoverability test
HV interrupts that use HSRR registers do not enter with MSR[RI] clear, but their entry code is not recoverable vs NMI, due to shared use of HSPRG1 as a scratch register to save r13. This means that a system reset or machine check that hits in HSRR interrupt entry can cause r13 to be silently corrupted. Fix this by marking NMIs non-recoverable if they land in HV interrupt ranges. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/kernel/mce.c')
-rw-r--r--arch/powerpc/kernel/mce.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c
index d501b48f287e..b5fec1f9751a 100644
--- a/arch/powerpc/kernel/mce.c
+++ b/arch/powerpc/kernel/mce.c
@@ -31,6 +31,7 @@
#include <asm/machdep.h>
#include <asm/mce.h>
+#include <asm/nmi.h>
static DEFINE_PER_CPU(int, mce_nest_count);
static DEFINE_PER_CPU(struct machine_check_event[MAX_MC_EVT], mce_event);
@@ -490,6 +491,8 @@ long machine_check_early(struct pt_regs *regs)
{
long handled = 0;
+ hv_nmi_check_nonrecoverable(regs);
+
/*
* See if platform is capable of handling machine check.
*/