hpwdt: use nmi_panic() when kernel panics in NMI handler
Commit1717f2096b
("panic, x86: Fix re-entrance problem due to panic on NMI") introduced nmi_panic() which prevents concurrent and recursive execution of panic(). It also saves registers for the crash dump on x86 by later commit58c5661f21
("panic, x86: Allow CPUs to save registers even if looping in NMI context"). hpwdt driver can call panic() from NMI handler, so replace it with nmi_panic(). Also, do some cleanups. Signed-off-by: Hidehiro Kawai <hidehiro.kawai.ez@hitachi.com> Acked-by: Guenter Roeck <linux@roeck-us.net> Cc: Thomas Mingarelli <thomas.mingarelli@hpe.com> Cc: Wim Van Sebroeck <wim@iguana.be> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
73cbf4a1dd
commit
abc514c580
1 changed files with 5 additions and 6 deletions
|
@ -484,7 +484,7 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
|
||||||
static int die_nmi_called;
|
static int die_nmi_called;
|
||||||
|
|
||||||
if (!hpwdt_nmi_decoding)
|
if (!hpwdt_nmi_decoding)
|
||||||
goto out;
|
return NMI_DONE;
|
||||||
|
|
||||||
spin_lock_irqsave(&rom_lock, rom_pl);
|
spin_lock_irqsave(&rom_lock, rom_pl);
|
||||||
if (!die_nmi_called && !is_icru && !is_uefi)
|
if (!die_nmi_called && !is_icru && !is_uefi)
|
||||||
|
@ -497,11 +497,11 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
|
||||||
|
|
||||||
if (!is_icru && !is_uefi) {
|
if (!is_icru && !is_uefi) {
|
||||||
if (cmn_regs.u1.ral == 0) {
|
if (cmn_regs.u1.ral == 0) {
|
||||||
panic("An NMI occurred, "
|
nmi_panic(regs, "An NMI occurred, but unable to determine source.\n");
|
||||||
"but unable to determine source.\n");
|
return NMI_HANDLED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
panic("An NMI occurred. Depending on your system the reason "
|
nmi_panic(regs, "An NMI occurred. Depending on your system the reason "
|
||||||
"for the NMI is logged in any one of the following "
|
"for the NMI is logged in any one of the following "
|
||||||
"resources:\n"
|
"resources:\n"
|
||||||
"1. Integrated Management Log (IML)\n"
|
"1. Integrated Management Log (IML)\n"
|
||||||
|
@ -509,8 +509,7 @@ static int hpwdt_pretimeout(unsigned int ulReason, struct pt_regs *regs)
|
||||||
"3. OA Forward Progress Log\n"
|
"3. OA Forward Progress Log\n"
|
||||||
"4. iLO Event Log");
|
"4. iLO Event Log");
|
||||||
|
|
||||||
out:
|
return NMI_HANDLED;
|
||||||
return NMI_DONE;
|
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_HPWDT_NMI_DECODING */
|
#endif /* CONFIG_HPWDT_NMI_DECODING */
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue