kernel_samsung_a53x/arch/powerpc
Mahesh Salgaonkar f53d6656c2 powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt.
commit 0db880fc865ffb522141ced4bfa66c12ab1fbb70 upstream.

nmi_enter()/nmi_exit() touches per cpu variables which can lead to kernel
crash when invoked during real mode interrupt handling (e.g. early HMI/MCE
interrupt handler) if percpu allocation comes from vmalloc area.

Early HMI/MCE handlers are called through DEFINE_INTERRUPT_HANDLER_NMI()
wrapper which invokes nmi_enter/nmi_exit calls. We don't see any issue when
percpu allocation is from the embedded first chunk. However with
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK enabled there are chances where percpu
allocation can come from the vmalloc area.

With kernel command line "percpu_alloc=page" we can force percpu allocation
to come from vmalloc area and can see kernel crash in machine_check_early:

[    1.215714] NIP [c000000000e49eb4] rcu_nmi_enter+0x24/0x110
[    1.215717] LR [c0000000000461a0] machine_check_early+0xf0/0x2c0
[    1.215719] --- interrupt: 200
[    1.215720] [c000000fffd73180] [0000000000000000] 0x0 (unreliable)
[    1.215722] [c000000fffd731b0] [0000000000000000] 0x0
[    1.215724] [c000000fffd73210] [c000000000008364] machine_check_early_common+0x134/0x1f8

Fix this by avoiding use of nmi_enter()/nmi_exit() in real mode if percpu
first chunk is not embedded.

Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Tested-by: Shirisha Ganta <shirisha@linux.ibm.com>
Signed-off-by: Mahesh Salgaonkar <mahesh@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240410043006.81577-1-mahesh@linux.ibm.com
[ Conflicts in arch/powerpc/include/asm/interrupt.h
  because machine_check_early() and machine_check_exception()
  has been refactored. ]
Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-23 23:20:31 +01:00
..
boot Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
configs powerpc/configs: Update defconfig with now user-visible CONFIG_FSL_IFC 2024-11-23 23:20:18 +01:00
crypto Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
include powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt. 2024-11-23 23:20:31 +01:00
kernel powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt. 2024-11-23 23:20:31 +01:00
kexec Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kvm powerpc: fix a file leak in kvm_vcpu_ioctl_enable_cap() 2024-11-23 23:20:18 +01:00
lib powerpc: xor_vmx: Add '-mhard-float' to CFLAGS 2024-11-19 09:22:41 +01:00
math-emu Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mm powerpc/kasan: Fix addr error caused by page alignment 2024-11-18 12:13:29 +01:00
net Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
oprofile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
perf powerpc/hv-gpci: Fix the H_GET_PERF_COUNTER_INFO hcall return value checks 2024-11-19 08:44:55 +01:00
platforms powerpc/pseries: Whitelist dtl slub object for copying to userspace 2024-11-19 14:19:50 +01:00
purgatory Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sysdev powerpc/fsl-soc: hide unused const variable 2024-11-19 12:26:57 +01:00
tools Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xmon powerpc/xmon: Fix disassembly CPU feature checks 2024-11-23 23:20:10 +01:00
Kbuild Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig.debug Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.postlink Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00