kdb,debug_core: Allow the debug core to receive a panic notification
It is highly desirable to trap into kdb on panic. The debug core will attempt to register as the first in line for the panic notifier. CC: Ingo Molnar <mingo@elte.hu> CC: Andrew Morton <akpm@linux-foundation.org> CC: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
This commit is contained in:
parent
5b778dadcd
commit
4402c153cb
1 changed files with 19 additions and 0 deletions
|
@ -762,11 +762,28 @@ static struct sysrq_key_op sysrq_dbg_op = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static int kgdb_panic_event(struct notifier_block *self,
|
||||
unsigned long val,
|
||||
void *data)
|
||||
{
|
||||
if (dbg_kdb_mode)
|
||||
kdb_printf("PANIC: %s\n", (char *)data);
|
||||
kgdb_breakpoint();
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
static struct notifier_block kgdb_panic_event_nb = {
|
||||
.notifier_call = kgdb_panic_event,
|
||||
.priority = INT_MAX,
|
||||
};
|
||||
|
||||
static void kgdb_register_callbacks(void)
|
||||
{
|
||||
if (!kgdb_io_module_registered) {
|
||||
kgdb_io_module_registered = 1;
|
||||
kgdb_arch_init();
|
||||
atomic_notifier_chain_register(&panic_notifier_list,
|
||||
&kgdb_panic_event_nb);
|
||||
#ifdef CONFIG_MAGIC_SYSRQ
|
||||
register_sysrq_key('g', &sysrq_dbg_op);
|
||||
#endif
|
||||
|
@ -786,6 +803,8 @@ static void kgdb_unregister_callbacks(void)
|
|||
*/
|
||||
if (kgdb_io_module_registered) {
|
||||
kgdb_io_module_registered = 0;
|
||||
atomic_notifier_chain_unregister(&panic_notifier_list,
|
||||
&kgdb_panic_event_nb);
|
||||
kgdb_arch_exit();
|
||||
#ifdef CONFIG_MAGIC_SYSRQ
|
||||
unregister_sysrq_key('g', &sysrq_dbg_op);
|
||||
|
|
Reference in a new issue