Skip to content

Commit

Permalink
MIPS: Add NMI notifier
Browse files Browse the repository at this point in the history
Allow the board support code to register a raw notifier callback for
NMI, similar to what is done for CU2 exceptions.

Signed-off-by: Kevin Cernekee <cernekee@gmail.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/2958/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
  • Loading branch information
Kevin Cernekee authored and Ralf Baechle committed Dec 7, 2011
1 parent 18a1eef commit 34bd92e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 0 deletions.
12 changes: 12 additions & 0 deletions arch/mips/include/asm/traps.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,16 @@ extern void (*board_nmi_handler_setup)(void);
extern void (*board_ejtag_handler_setup)(void);
extern void (*board_bind_eic_interrupt)(int irq, int regset);

extern int register_nmi_notifier(struct notifier_block *nb);

#define nmi_notifier(fn, pri) \
({ \
static struct notifier_block fn##_nb = { \
.notifier_call = fn, \
.priority = pri \
}; \
\
register_nmi_notifier(&fn##_nb); \
})

#endif /* _ASM_TRAPS_H */
9 changes: 9 additions & 0 deletions arch/mips/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1339,9 +1339,18 @@ void ejtag_exception_handler(struct pt_regs *regs)

/*
* NMI exception handler.
* No lock; only written during early bootup by CPU 0.
*/
static RAW_NOTIFIER_HEAD(nmi_chain);

int register_nmi_notifier(struct notifier_block *nb)
{
return raw_notifier_chain_register(&nmi_chain, nb);
}

NORET_TYPE void ATTRIB_NORET nmi_exception_handler(struct pt_regs *regs)
{
raw_notifier_call_chain(&nmi_chain, 0, regs);
bust_spinlocks(1);
printk("NMI taken!!!!\n");
die("NMI", regs);
Expand Down

0 comments on commit 34bd92e

Please sign in to comment.