powerpc/64e/interrupt: NMI save irq soft-mask state in C
64e non-maskable interrupts save the state of the irq soft-mask in asm. This can be done in C in interrupt wrappers as 64s does. I haven't been able to test this with qemu because it doesn't seem to cause FSL bookE WDT interrupts. This makes WatchdogException an NMI interrupt, which affects 32-bit as well (okay, or create a new handler?) Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20210316104206.407354-6-npiggin@gmail.com
This commit is contained in:
committed by
Michael Ellerman
parent
0c2472de23
commit
3db8aa10de
@@ -1078,6 +1078,16 @@ DEFINE_INTERRUPT_HANDLER_ASYNC(unknown_async_exception)
|
||||
_exception(SIGTRAP, regs, TRAP_UNK, 0);
|
||||
}
|
||||
|
||||
DEFINE_INTERRUPT_HANDLER_NMI(unknown_nmi_exception)
|
||||
{
|
||||
printk("Bad trap at PC: %lx, SR: %lx, vector=%lx\n",
|
||||
regs->nip, regs->msr, regs->trap);
|
||||
|
||||
_exception(SIGTRAP, regs, TRAP_UNK, 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_INTERRUPT_HANDLER(instruction_breakpoint_exception)
|
||||
{
|
||||
if (notify_die(DIE_IABR_MATCH, "iabr_match", regs, 5,
|
||||
@@ -2181,10 +2191,11 @@ void __attribute__ ((weak)) WatchdogHandler(struct pt_regs *regs)
|
||||
return;
|
||||
}
|
||||
|
||||
DEFINE_INTERRUPT_HANDLER(WatchdogException) /* XXX NMI? async? */
|
||||
DEFINE_INTERRUPT_HANDLER_NMI(WatchdogException)
|
||||
{
|
||||
printk (KERN_EMERG "PowerPC Book-E Watchdog Exception\n");
|
||||
WatchdogHandler(regs);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user