diff options
Diffstat (limited to 'kernel/panic.c')
| -rw-r--r-- | kernel/panic.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/kernel/panic.c b/kernel/panic.c index d10c340c43b0..855f66738bc7 100644 --- a/kernel/panic.c +++ b/kernel/panic.c | |||
| @@ -46,6 +46,13 @@ int panic_on_warn __read_mostly; | |||
| 46 | int panic_timeout = CONFIG_PANIC_TIMEOUT; | 46 | int panic_timeout = CONFIG_PANIC_TIMEOUT; |
| 47 | EXPORT_SYMBOL_GPL(panic_timeout); | 47 | EXPORT_SYMBOL_GPL(panic_timeout); |
| 48 | 48 | ||
| 49 | #define PANIC_PRINT_TASK_INFO 0x00000001 | ||
| 50 | #define PANIC_PRINT_MEM_INFO 0x00000002 | ||
| 51 | #define PANIC_PRINT_TIMER_INFO 0x00000004 | ||
| 52 | #define PANIC_PRINT_LOCK_INFO 0x00000008 | ||
| 53 | #define PANIC_PRINT_FTRACE_INFO 0x00000010 | ||
| 54 | static unsigned long panic_print; | ||
| 55 | |||
| 49 | ATOMIC_NOTIFIER_HEAD(panic_notifier_list); | 56 | ATOMIC_NOTIFIER_HEAD(panic_notifier_list); |
| 50 | 57 | ||
| 51 | EXPORT_SYMBOL(panic_notifier_list); | 58 | EXPORT_SYMBOL(panic_notifier_list); |
| @@ -125,6 +132,24 @@ void nmi_panic(struct pt_regs *regs, const char *msg) | |||
| 125 | } | 132 | } |
| 126 | EXPORT_SYMBOL(nmi_panic); | 133 | EXPORT_SYMBOL(nmi_panic); |
| 127 | 134 | ||
| 135 | static void panic_print_sys_info(void) | ||
| 136 | { | ||
| 137 | if (panic_print & PANIC_PRINT_TASK_INFO) | ||
| 138 | show_state(); | ||
| 139 | |||
| 140 | if (panic_print & PANIC_PRINT_MEM_INFO) | ||
| 141 | show_mem(0, NULL); | ||
| 142 | |||
| 143 | if (panic_print & PANIC_PRINT_TIMER_INFO) | ||
| 144 | sysrq_timer_list_show(); | ||
| 145 | |||
| 146 | if (panic_print & PANIC_PRINT_LOCK_INFO) | ||
| 147 | debug_show_all_locks(); | ||
| 148 | |||
| 149 | if (panic_print & PANIC_PRINT_FTRACE_INFO) | ||
| 150 | ftrace_dump(DUMP_ALL); | ||
| 151 | } | ||
| 152 | |||
| 128 | /** | 153 | /** |
| 129 | * panic - halt the system | 154 | * panic - halt the system |
| 130 | * @fmt: The text string to print | 155 | * @fmt: The text string to print |
| @@ -254,6 +279,8 @@ void panic(const char *fmt, ...) | |||
| 254 | debug_locks_off(); | 279 | debug_locks_off(); |
| 255 | console_flush_on_panic(); | 280 | console_flush_on_panic(); |
| 256 | 281 | ||
| 282 | panic_print_sys_info(); | ||
| 283 | |||
| 257 | if (!panic_blink) | 284 | if (!panic_blink) |
| 258 | panic_blink = no_blink; | 285 | panic_blink = no_blink; |
| 259 | 286 | ||
| @@ -658,6 +685,7 @@ void refcount_error_report(struct pt_regs *regs, const char *err) | |||
| 658 | #endif | 685 | #endif |
| 659 | 686 | ||
| 660 | core_param(panic, panic_timeout, int, 0644); | 687 | core_param(panic, panic_timeout, int, 0644); |
| 688 | core_param(panic_print, panic_print, ulong, 0644); | ||
| 661 | core_param(pause_on_oops, pause_on_oops, int, 0644); | 689 | core_param(pause_on_oops, pause_on_oops, int, 0644); |
| 662 | core_param(panic_on_warn, panic_on_warn, int, 0644); | 690 | core_param(panic_on_warn, panic_on_warn, int, 0644); |
| 663 | core_param(crash_kexec_post_notifiers, crash_kexec_post_notifiers, bool, 0644); | 691 | core_param(crash_kexec_post_notifiers, crash_kexec_post_notifiers, bool, 0644); |
