powerpc/powernv: Implement NMI IPI with OPAL_SIGNAL_SYSTEM_RESET
This allows MSR[EE]=0 lockups to be detected on an OPAL (bare metal)
system similarly to the hcall NMI IPI on pseries guests, when the
platform/firmware supports it.
This is an example of CPU10 spinning with interrupts hard disabled:
Watchdog CPU:32 detected Hard LOCKUP other CPUS:10
Watchdog CPU:10 Hard LOCKUP
CPU: 10 PID: 4410 Comm: bash Not tainted
4.13.0-rc7-00074-ge89ce1f89f62-dirty #34
task:
c0000003a82b4400 task.stack:
c0000003af55c000
NIP:
c0000000000a7b38 LR:
c000000000659044 CTR:
c0000000000a7b00
REGS:
c00000000fd23d80 TRAP: 0100 Not tainted (
4.13.0-rc7-00074-ge89ce1f89f62-dirty)
MSR:
90000000000c1033 <SF,HV,ME,IR,DR,RI,LE>
CR:
28422222 XER:
20000000
CFAR:
c0000000000a7b38 SOFTE: 0
GPR00:
c000000000659044 c0000003af55fbb0 c000000001072a00 0000000000000078
GPR04:
c0000003c81b5c80 c0000003c81cc7e8 9000000000009033 0000000000000000
GPR08:
0000000000000000 c0000000000a7b00 0000000000000001 9000000000001003
GPR12:
c0000000000a7b00 c00000000fd83200 0000000010180df8 0000000010189e60
GPR16:
0000000010189ed8 0000000010151270 000000001018bd88 000000001018de78
GPR20:
00000000370a0668 0000000000000001 00000000101645e0 0000000010163c10
GPR24:
00007fffd14d6294 00007fffd14d6290 c000000000fba6f0 0000000000000004
GPR28:
c000000000f351d8 0000000000000078 c000000000f4095c 0000000000000000
NIP [
c0000000000a7b38] sysrq_handle_xmon+0x38/0x40
LR [
c000000000659044] __handle_sysrq+0xe4/0x270
Call Trace:
[
c0000003af55fbd0] [
c000000000659044] __handle_sysrq+0xe4/0x270
[
c0000003af55fc70] [
c000000000659810] write_sysrq_trigger+0x70/0xa0
[
c0000003af55fca0] [
c0000000003da650] proc_reg_write+0xb0/0x110
[
c0000003af55fcf0] [
c0000000003423bc] __vfs_write+0x6c/0x1b0
[
c0000003af55fd90] [
c000000000344398] vfs_write+0xd8/0x240
[
c0000003af55fde0] [
c00000000034632c] SyS_write+0x6c/0x110
[
c0000003af55fe30] [
c00000000000b220] system_call+0x58/0x6c
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
[mpe: Use kernel types for opal_signal_system_reset()]
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>