diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 14:10:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-05-21 14:10:41 -0400 |
commit | ac3ee84c604502240122c47b52f0542ec8774f15 (patch) | |
tree | fa74b50e310af6cef3298a052514b2d42b260d6b /kernel | |
parent | 90b9a32d8f441369b2f97a765d2d957b531eb653 (diff) | |
parent | 4fe1da4ebc18c4c42fa56c228447f68033fce5f0 (diff) |
Merge branch 'dbg-early-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb
* 'dbg-early-merge' of git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb:
echi-dbgp: Add kernel debugger support for the usb debug port
earlyprintk,vga,kdb: Fix \b and \r for earlyprintk=vga with kdb
kgdboc: Add ekgdboc for early use of the kernel debugger
x86,early dr regs,kgdb: Allow kernel debugger early dr register access
x86,kgdb: Implement early hardware breakpoint debugging
x86, kgdb, init: Add early and late debug states
x86, kgdb: early trap init for early debug
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/debug/debug_core.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c index 64b5588c9638..5cb7cd1de10c 100644 --- a/kernel/debug/debug_core.c +++ b/kernel/debug/debug_core.c | |||
@@ -78,6 +78,8 @@ static DEFINE_SPINLOCK(kgdb_registration_lock); | |||
78 | static int kgdb_con_registered; | 78 | static int kgdb_con_registered; |
79 | /* determine if kgdb console output should be used */ | 79 | /* determine if kgdb console output should be used */ |
80 | static int kgdb_use_con; | 80 | static int kgdb_use_con; |
81 | /* Flag for alternate operations for early debugging */ | ||
82 | bool dbg_is_early = true; | ||
81 | /* Next cpu to become the master debug core */ | 83 | /* Next cpu to become the master debug core */ |
82 | int dbg_switch_cpu; | 84 | int dbg_switch_cpu; |
83 | 85 | ||
@@ -777,11 +779,25 @@ static struct notifier_block kgdb_panic_event_nb = { | |||
777 | .priority = INT_MAX, | 779 | .priority = INT_MAX, |
778 | }; | 780 | }; |
779 | 781 | ||
782 | void __weak kgdb_arch_late(void) | ||
783 | { | ||
784 | } | ||
785 | |||
786 | void __init dbg_late_init(void) | ||
787 | { | ||
788 | dbg_is_early = false; | ||
789 | if (kgdb_io_module_registered) | ||
790 | kgdb_arch_late(); | ||
791 | kdb_init(KDB_INIT_FULL); | ||
792 | } | ||
793 | |||
780 | static void kgdb_register_callbacks(void) | 794 | static void kgdb_register_callbacks(void) |
781 | { | 795 | { |
782 | if (!kgdb_io_module_registered) { | 796 | if (!kgdb_io_module_registered) { |
783 | kgdb_io_module_registered = 1; | 797 | kgdb_io_module_registered = 1; |
784 | kgdb_arch_init(); | 798 | kgdb_arch_init(); |
799 | if (!dbg_is_early) | ||
800 | kgdb_arch_late(); | ||
785 | atomic_notifier_chain_register(&panic_notifier_list, | 801 | atomic_notifier_chain_register(&panic_notifier_list, |
786 | &kgdb_panic_event_nb); | 802 | &kgdb_panic_event_nb); |
787 | #ifdef CONFIG_MAGIC_SYSRQ | 803 | #ifdef CONFIG_MAGIC_SYSRQ |