diff options
author | Jason Wessel <jason.wessel@windriver.com> | 2010-05-20 22:04:29 -0400 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2010-05-20 22:04:29 -0400 |
commit | 0b4b3827db386ec6034a5aba1261025b039440c2 (patch) | |
tree | a3469de6930fe3e850c8e4c49c26a2a3b53612dd /include | |
parent | 29c843912a0baa7fa63033fe28e1ca7e796686a5 (diff) |
x86, kgdb, init: Add early and late debug states
The kernel debugger can operate well before mm_init(), but the x86
hardware breakpoint code which uses the perf api requires that the
kernel allocators are initialized.
This means the kernel debug core needs to provide an optional arch
specific call back to allow the initialization functions to run after
the kernel has been further initialized.
The kdb shell already had a similar restriction with an early
initialization and late initialization. The kdb_init() was moved into
the debug core's version of the late init which is called
dbg_late_init();
CC: kgdb-bugreport@lists.sourceforge.net
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/kgdb.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/include/linux/kgdb.h b/include/linux/kgdb.h index 6c784ab6856a..9340f34d1bb5 100644 --- a/include/linux/kgdb.h +++ b/include/linux/kgdb.h | |||
@@ -208,6 +208,17 @@ extern int kgdb_arch_set_breakpoint(unsigned long addr, char *saved_instr); | |||
208 | extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); | 208 | extern int kgdb_arch_remove_breakpoint(unsigned long addr, char *bundle); |
209 | 209 | ||
210 | /** | 210 | /** |
211 | * kgdb_arch_late - Perform any architecture specific initalization. | ||
212 | * | ||
213 | * This function will handle the late initalization of any | ||
214 | * architecture specific callbacks. This is an optional function for | ||
215 | * handling things like late initialization of hw breakpoints. The | ||
216 | * default implementation does nothing. | ||
217 | */ | ||
218 | extern void kgdb_arch_late(void); | ||
219 | |||
220 | |||
221 | /** | ||
211 | * struct kgdb_arch - Describe architecture specific values. | 222 | * struct kgdb_arch - Describe architecture specific values. |
212 | * @gdb_bpt_instr: The instruction to trigger a breakpoint. | 223 | * @gdb_bpt_instr: The instruction to trigger a breakpoint. |
213 | * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT. | 224 | * @flags: Flags for the breakpoint, currently just %KGDB_HW_BREAKPOINT. |
@@ -285,7 +296,10 @@ extern int kgdb_single_step; | |||
285 | extern atomic_t kgdb_active; | 296 | extern atomic_t kgdb_active; |
286 | #define in_dbg_master() \ | 297 | #define in_dbg_master() \ |
287 | (raw_smp_processor_id() == atomic_read(&kgdb_active)) | 298 | (raw_smp_processor_id() == atomic_read(&kgdb_active)) |
299 | extern bool dbg_is_early; | ||
300 | extern void __init dbg_late_init(void); | ||
288 | #else /* ! CONFIG_KGDB */ | 301 | #else /* ! CONFIG_KGDB */ |
289 | #define in_dbg_master() (0) | 302 | #define in_dbg_master() (0) |
303 | #define dbg_late_init() | ||
290 | #endif /* ! CONFIG_KGDB */ | 304 | #endif /* ! CONFIG_KGDB */ |
291 | #endif /* _KGDB_H_ */ | 305 | #endif /* _KGDB_H_ */ |