| From 8d0e2101274358d9b6b1f27232b40253ca48bab5 Mon Sep 17 00:00:00 2001 |
| From: Ganesh Goudar <ganeshgr@linux.ibm.com> |
| Date: Fri, 9 Oct 2020 12:10:04 +0530 |
| Subject: powerpc/mce: Avoid nmi_enter/exit in real mode on pseries hash |
| |
| From: Ganesh Goudar <ganeshgr@linux.ibm.com> |
| |
| commit 8d0e2101274358d9b6b1f27232b40253ca48bab5 upstream. |
| |
| Use of nmi_enter/exit in real mode handler causes the kernel to panic |
| and reboot on injecting SLB mutihit on pseries machine running in hash |
| MMU mode, because these calls try to accesses memory outside RMO |
| region in real mode handler where translation is disabled. |
| |
| Add check to not to use these calls on pseries machine running in hash |
| MMU mode. |
| |
| Fixes: 116ac378bb3f ("powerpc/64s: machine check interrupt update NMI accounting") |
| Cc: stable@vger.kernel.org # v5.8+ |
| Signed-off-by: Ganesh Goudar <ganeshgr@linux.ibm.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Link: https://lore.kernel.org/r/20201009064005.19777-2-ganeshgr@linux.ibm.com |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/powerpc/kernel/mce.c | 7 +++---- |
| 1 file changed, 3 insertions(+), 4 deletions(-) |
| |
| --- a/arch/powerpc/kernel/mce.c |
| +++ b/arch/powerpc/kernel/mce.c |
| @@ -591,12 +591,11 @@ EXPORT_SYMBOL_GPL(machine_check_print_ev |
| long notrace machine_check_early(struct pt_regs *regs) |
| { |
| long handled = 0; |
| - bool nested = in_nmi(); |
| u8 ftrace_enabled = this_cpu_get_ftrace_enabled(); |
| |
| this_cpu_set_ftrace_enabled(0); |
| - |
| - if (!nested) |
| + /* Do not use nmi_enter/exit for pseries hpte guest */ |
| + if (radix_enabled() || !firmware_has_feature(FW_FEATURE_LPAR)) |
| nmi_enter(); |
| |
| hv_nmi_check_nonrecoverable(regs); |
| @@ -607,7 +606,7 @@ long notrace machine_check_early(struct |
| if (ppc_md.machine_check_early) |
| handled = ppc_md.machine_check_early(regs); |
| |
| - if (!nested) |
| + if (radix_enabled() || !firmware_has_feature(FW_FEATURE_LPAR)) |
| nmi_exit(); |
| |
| this_cpu_set_ftrace_enabled(ftrace_enabled); |