@@ -46,6 +46,13 @@ int panic_on_warn __read_mostly;
46
46
int panic_timeout = CONFIG_PANIC_TIMEOUT ;
47
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
56
ATOMIC_NOTIFIER_HEAD (panic_notifier_list );
50
57
51
58
EXPORT_SYMBOL (panic_notifier_list );
@@ -125,6 +132,24 @@ void nmi_panic(struct pt_regs *regs, const char *msg)
125
132
}
126
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
154
* panic - halt the system
130
155
* @fmt: The text string to print
@@ -254,6 +279,8 @@ void panic(const char *fmt, ...)
254
279
debug_locks_off ();
255
280
console_flush_on_panic ();
256
281
282
+ panic_print_sys_info ();
283
+
257
284
if (!panic_blink )
258
285
panic_blink = no_blink ;
259
286
@@ -658,6 +685,7 @@ void refcount_error_report(struct pt_regs *regs, const char *err)
658
685
#endif
659
686
660
687
core_param (panic , panic_timeout , int , 0644 );
688
+ core_param (panic_print , panic_print , ulong , 0644 );
661
689
core_param (pause_on_oops , pause_on_oops , int , 0644 );
662
690
core_param (panic_on_warn , panic_on_warn , int , 0644 );
663
691
core_param (crash_kexec_post_notifiers , crash_kexec_post_notifiers , bool , 0644 );
0 commit comments