[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: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
committed by
Martin Schwidefsky
parent
5fd9c6e214
commit
5c699714d0
@@ -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)
|
|||||||
|
|
||||||
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 @@
|
|||||||
#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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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);
|
||||||
|
Reference in New Issue
Block a user