Commit 5c699714 authored by Heiko Carstens's avatar Heiko Carstens Committed by Martin Schwidefsky

[S390] Print kernel version in dump_stack() and show_regs().

Also print PREEMPT and/or SMP if the kernel was configured that way.
Makes s390 look a bit more like other architectures.
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent 5fd9c6e2
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
#include <linux/init.h> #include <linux/init.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/utsname.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/pgtable.h> #include <asm/pgtable.h>
#include <asm/system.h> #include <asm/system.h>
...@@ -182,13 +182,15 @@ void cpu_idle(void) ...@@ -182,13 +182,15 @@ void cpu_idle(void)
void show_regs(struct pt_regs *regs) void show_regs(struct pt_regs *regs)
{ {
struct task_struct *tsk = current; print_modules();
printk("CPU: %d %s %s %.*s\n",
printk("CPU: %d %s\n", task_thread_info(tsk)->cpu, print_tainted()); task_thread_info(current)->cpu, print_tainted(),
printk("Process %s (pid: %d, task: %p, ksp: %p)\n", init_utsname()->release,
current->comm, task_pid_nr(current), (void *) tsk, (int)strcspn(init_utsname()->version, " "),
(void *) tsk->thread.ksp); init_utsname()->version);
printk("Process %s (pid: %d, task: %p, ksp: %p)\n",
current->comm, current->pid, current,
(void *) current->thread.ksp);
show_registers(regs); show_registers(regs);
/* Show stack backtrace if pt_regs is from kernel mode */ /* Show stack backtrace if pt_regs is from kernel mode */
if (!(regs->psw.mask & PSW_MASK_PSTATE)) if (!(regs->psw.mask & PSW_MASK_PSTATE))
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/reboot.h> #include <linux/reboot.h>
#include <linux/kprobes.h> #include <linux/kprobes.h>
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/utsname.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/io.h> #include <asm/io.h>
...@@ -168,9 +169,16 @@ void show_stack(struct task_struct *task, unsigned long *sp) ...@@ -168,9 +169,16 @@ void show_stack(struct task_struct *task, unsigned long *sp)
*/ */
void dump_stack(void) void dump_stack(void)
{ {
printk("CPU: %d %s %s %.*s\n",
task_thread_info(current)->cpu, print_tainted(),
init_utsname()->release,
(int)strcspn(init_utsname()->version, " "),
init_utsname()->version);
printk("Process %s (pid: %d, task: %p, ksp: %p)\n",
current->comm, current->pid, current,
(void *) current->thread.ksp);
show_stack(NULL, NULL); show_stack(NULL, NULL);
} }
EXPORT_SYMBOL(dump_stack); EXPORT_SYMBOL(dump_stack);
static inline int mask_bits(struct pt_regs *regs, unsigned long bits) static inline int mask_bits(struct pt_regs *regs, unsigned long bits)
...@@ -258,8 +266,14 @@ void die(const char * str, struct pt_regs * regs, long err) ...@@ -258,8 +266,14 @@ void die(const char * str, struct pt_regs * regs, long err)
console_verbose(); console_verbose();
spin_lock_irq(&die_lock); spin_lock_irq(&die_lock);
bust_spinlocks(1); bust_spinlocks(1);
printk("%s: %04lx [#%d]\n", str, err & 0xffff, ++die_counter); printk("%s: %04lx [#%d] ", str, err & 0xffff, ++die_counter);
print_modules(); #ifdef CONFIG_PREEMPT
printk("PREEMPT ");
#endif
#ifdef CONFIG_SMP
printk("SMP");
#endif
printk("\n");
notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV); notify_die(DIE_OOPS, str, regs, err, current->thread.trap_no, SIGSEGV);
show_regs(regs); show_regs(regs);
bust_spinlocks(0); bust_spinlocks(0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment