diff options
Diffstat (limited to 'arch/x86/kernel/kgdb.c')
-rw-r--r-- | arch/x86/kernel/kgdb.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index acba57169938..95b89d4cb8f1 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
@@ -538,7 +538,7 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) | |||
538 | return NOTIFY_DONE; | 538 | return NOTIFY_DONE; |
539 | } | 539 | } |
540 | 540 | ||
541 | if (kgdb_handle_exception(args->trapnr, args->signr, args->err, regs)) | 541 | if (kgdb_handle_exception(args->trapnr, args->signr, cmd, regs)) |
542 | return NOTIFY_DONE; | 542 | return NOTIFY_DONE; |
543 | 543 | ||
544 | /* Must touch watchdog before return to normal operation */ | 544 | /* Must touch watchdog before return to normal operation */ |
@@ -546,6 +546,26 @@ static int __kgdb_notify(struct die_args *args, unsigned long cmd) | |||
546 | return NOTIFY_STOP; | 546 | return NOTIFY_STOP; |
547 | } | 547 | } |
548 | 548 | ||
549 | #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP | ||
550 | int kgdb_ll_trap(int cmd, const char *str, | ||
551 | struct pt_regs *regs, long err, int trap, int sig) | ||
552 | { | ||
553 | struct die_args args = { | ||
554 | .regs = regs, | ||
555 | .str = str, | ||
556 | .err = err, | ||
557 | .trapnr = trap, | ||
558 | .signr = sig, | ||
559 | |||
560 | }; | ||
561 | |||
562 | if (!kgdb_io_module_registered) | ||
563 | return NOTIFY_DONE; | ||
564 | |||
565 | return __kgdb_notify(&args, cmd); | ||
566 | } | ||
567 | #endif /* CONFIG_KGDB_LOW_LEVEL_TRAP */ | ||
568 | |||
549 | static int | 569 | static int |
550 | kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr) | 570 | kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr) |
551 | { | 571 | { |