diff options
Diffstat (limited to 'kernel/panic.c')
-rw-r--r-- | kernel/panic.c | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/kernel/panic.c b/kernel/panic.c index da4d6bac270e..d9e90cfe3298 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
@@ -20,6 +20,7 @@ | |||
20 | #include <linux/kexec.h> | 20 | #include <linux/kexec.h> |
21 | #include <linux/debug_locks.h> | 21 | #include <linux/debug_locks.h> |
22 | #include <linux/random.h> | 22 | #include <linux/random.h> |
23 | #include <linux/kallsyms.h> | ||
23 | 24 | ||
24 | int panic_on_oops; | 25 | int panic_on_oops; |
25 | int tainted; | 26 | int tainted; |
@@ -280,6 +281,13 @@ static int init_oops_id(void) | |||
280 | } | 281 | } |
281 | late_initcall(init_oops_id); | 282 | late_initcall(init_oops_id); |
282 | 283 | ||
284 | static void print_oops_end_marker(void) | ||
285 | { | ||
286 | init_oops_id(); | ||
287 | printk(KERN_WARNING "---[ end trace %016llx ]---\n", | ||
288 | (unsigned long long)oops_id); | ||
289 | } | ||
290 | |||
283 | /* | 291 | /* |
284 | * Called when the architecture exits its oops handler, after printing | 292 | * Called when the architecture exits its oops handler, after printing |
285 | * everything. | 293 | * everything. |
@@ -287,11 +295,26 @@ late_initcall(init_oops_id); | |||
287 | void oops_exit(void) | 295 | void oops_exit(void) |
288 | { | 296 | { |
289 | do_oops_enter_exit(); | 297 | do_oops_enter_exit(); |
290 | init_oops_id(); | 298 | print_oops_end_marker(); |
291 | printk(KERN_WARNING "---[ end trace %016llx ]---\n", | ||
292 | (unsigned long long)oops_id); | ||
293 | } | 299 | } |
294 | 300 | ||
301 | #ifdef WANT_WARN_ON_SLOWPATH | ||
302 | void warn_on_slowpath(const char *file, int line) | ||
303 | { | ||
304 | char function[KSYM_SYMBOL_LEN]; | ||
305 | unsigned long caller = (unsigned long) __builtin_return_address(0); | ||
306 | sprint_symbol(function, caller); | ||
307 | |||
308 | printk(KERN_WARNING "------------[ cut here ]------------\n"); | ||
309 | printk(KERN_WARNING "WARNING: at %s:%d %s()\n", file, | ||
310 | line, function); | ||
311 | print_modules(); | ||
312 | dump_stack(); | ||
313 | print_oops_end_marker(); | ||
314 | } | ||
315 | EXPORT_SYMBOL(warn_on_slowpath); | ||
316 | #endif | ||
317 | |||
295 | #ifdef CONFIG_CC_STACKPROTECTOR | 318 | #ifdef CONFIG_CC_STACKPROTECTOR |
296 | /* | 319 | /* |
297 | * Called when gcc's -fstack-protector feature is used, and | 320 | * Called when gcc's -fstack-protector feature is used, and |