diff options
Diffstat (limited to 'lib/dump_stack.c')
| -rw-r--r-- | lib/dump_stack.c | 60 | 
1 files changed, 60 insertions, 0 deletions
| diff --git a/lib/dump_stack.c b/lib/dump_stack.c index c5edbedd364d..5cff72f18c4a 100644 --- a/lib/dump_stack.c +++ b/lib/dump_stack.c @@ -10,6 +10,66 @@  #include <linux/sched/debug.h>  #include <linux/smp.h>  #include <linux/atomic.h> +#include <linux/kexec.h> +#include <linux/utsname.h> + +static char dump_stack_arch_desc_str[128]; + +/** + * dump_stack_set_arch_desc - set arch-specific str to show with task dumps + * @fmt: printf-style format string + * @...: arguments for the format string + * + * The configured string will be printed right after utsname during task + * dumps.  Usually used to add arch-specific system identifiers.  If an + * arch wants to make use of such an ID string, it should initialize this + * as soon as possible during boot. + */ +void __init dump_stack_set_arch_desc(const char *fmt, ...) +{ +	va_list args; + +	va_start(args, fmt); +	vsnprintf(dump_stack_arch_desc_str, sizeof(dump_stack_arch_desc_str), +		  fmt, args); +	va_end(args); +} + +/** + * dump_stack_print_info - print generic debug info for dump_stack() + * @log_lvl: log level + * + * Arch-specific dump_stack() implementations can use this function to + * print out the same debug information as the generic dump_stack(). + */ +void dump_stack_print_info(const char *log_lvl) +{ +	printk("%sCPU: %d PID: %d Comm: %.20s %s%s %s %.*s\n", +	       log_lvl, raw_smp_processor_id(), current->pid, current->comm, +	       kexec_crash_loaded() ? "Kdump: loaded " : "", +	       print_tainted(), +	       init_utsname()->release, +	       (int)strcspn(init_utsname()->version, " "), +	       init_utsname()->version); + +	if (dump_stack_arch_desc_str[0] != '\0') +		printk("%sHardware name: %s\n", +		       log_lvl, dump_stack_arch_desc_str); + +	print_worker_info(log_lvl, current); +} + +/** + * show_regs_print_info - print generic debug info for show_regs() + * @log_lvl: log level + * + * show_regs() implementations can use this function to print out generic + * debug information. + */ +void show_regs_print_info(const char *log_lvl) +{ +	dump_stack_print_info(log_lvl); +}  static void __dump_stack(void)  { | 
