powerpc/64s: Disallow system reset vs system reset reentrancy
In preparation for using a dedicated stack for system reset interrupts, prevent a nested system reset from recovering, in order to simplify code that is called in crash/debug path. This allows a system reset interrupt to just use the base stack pointer. Keep an in_nmi nesting counter similarly to the in_mce counter. Consider the interrrupt non-recoverable if it is taken inside another system reset. Interrupt nesting could be allowed similarly to MCE, but system reset is a special case that's not for normal operation, so simplicity wins until there is requirement for nested system reset interrupts. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:

committed by
Michael Ellerman

parent
a3d96f70c1
commit
c4f3b52ce7
@@ -282,11 +282,17 @@ void system_reset_exception(struct pt_regs *regs)
|
||||
/* See if any machine dependent calls */
|
||||
if (ppc_md.system_reset_exception) {
|
||||
if (ppc_md.system_reset_exception(regs))
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
|
||||
die("System Reset", regs, SIGABRT);
|
||||
|
||||
out:
|
||||
#ifdef CONFIG_PPC_BOOK3S_64
|
||||
BUG_ON(get_paca()->in_nmi == 0);
|
||||
if (get_paca()->in_nmi > 1)
|
||||
panic("Unrecoverable nested System Reset");
|
||||
#endif
|
||||
/* Must die if the interrupt is not recoverable */
|
||||
if (!(regs->msr & MSR_RI))
|
||||
panic("Unrecoverable System Reset");
|
||||
|
Reference in New Issue
Block a user