mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-13 00:29:50 +00:00
[S390] Move show_regs to traps.c.
This is where it should be and we can get rid of some externs and a static inline function. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
2f97220231
commit
4e83be7b24
@ -180,24 +180,6 @@ void cpu_idle(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_regs(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
print_modules();
|
|
||||||
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_registers(regs);
|
|
||||||
/* Show stack backtrace if pt_regs is from kernel mode */
|
|
||||||
if (!(regs->psw.mask & PSW_MASK_PSTATE))
|
|
||||||
show_trace(NULL, (unsigned long *) regs->gprs[15]);
|
|
||||||
show_last_breaking_event(regs);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern void kernel_thread_starter(void);
|
extern void kernel_thread_starter(void);
|
||||||
|
|
||||||
asm(
|
asm(
|
||||||
|
@ -113,7 +113,7 @@ __show_trace(unsigned long sp, unsigned long low, unsigned long high)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void show_trace(struct task_struct *task, unsigned long *stack)
|
static void show_trace(struct task_struct *task, unsigned long *stack)
|
||||||
{
|
{
|
||||||
register unsigned long __r15 asm ("15");
|
register unsigned long __r15 asm ("15");
|
||||||
unsigned long sp;
|
unsigned long sp;
|
||||||
@ -161,14 +161,14 @@ void show_stack(struct task_struct *task, unsigned long *sp)
|
|||||||
show_trace(task, sp);
|
show_trace(task, sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
static void show_last_breaking_event(struct pt_regs *regs)
|
||||||
void show_last_breaking_event(struct pt_regs *regs)
|
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
printk("Last Breaking-Event-Address:\n");
|
printk("Last Breaking-Event-Address:\n");
|
||||||
printk(" [<%016lx>] ", regs->args[0] & PSW_ADDR_INSN);
|
printk(" [<%016lx>] ", regs->args[0] & PSW_ADDR_INSN);
|
||||||
print_symbol("%s\n", regs->args[0] & PSW_ADDR_INSN);
|
print_symbol("%s\n", regs->args[0] & PSW_ADDR_INSN);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The architecture-independent dump_stack generator
|
* The architecture-independent dump_stack generator
|
||||||
@ -223,6 +223,24 @@ void show_registers(struct pt_regs *regs)
|
|||||||
show_code(regs);
|
show_code(regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void show_regs(struct pt_regs *regs)
|
||||||
|
{
|
||||||
|
print_modules();
|
||||||
|
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_registers(regs);
|
||||||
|
/* Show stack backtrace if pt_regs is from kernel mode */
|
||||||
|
if (!(regs->psw.mask & PSW_MASK_PSTATE))
|
||||||
|
show_trace(NULL, (unsigned long *) regs->gprs[15]);
|
||||||
|
show_last_breaking_event(regs);
|
||||||
|
}
|
||||||
|
|
||||||
/* This is called from fs/proc/array.c */
|
/* This is called from fs/proc/array.c */
|
||||||
void task_show_regs(struct seq_file *m, struct task_struct *task)
|
void task_show_regs(struct seq_file *m, struct task_struct *task)
|
||||||
{
|
{
|
||||||
|
@ -172,16 +172,7 @@ extern unsigned long thread_saved_pc(struct task_struct *t);
|
|||||||
*/
|
*/
|
||||||
extern void task_show_regs(struct seq_file *m, struct task_struct *task);
|
extern void task_show_regs(struct seq_file *m, struct task_struct *task);
|
||||||
|
|
||||||
extern void show_registers(struct pt_regs *regs);
|
|
||||||
extern void show_code(struct pt_regs *regs);
|
extern void show_code(struct pt_regs *regs);
|
||||||
extern void show_trace(struct task_struct *task, unsigned long *sp);
|
|
||||||
#ifdef CONFIG_64BIT
|
|
||||||
extern void show_last_breaking_event(struct pt_regs *regs);
|
|
||||||
#else
|
|
||||||
static inline void show_last_breaking_event(struct pt_regs *regs)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
unsigned long get_wchan(struct task_struct *p);
|
unsigned long get_wchan(struct task_struct *p);
|
||||||
#define task_pt_regs(tsk) ((struct pt_regs *) \
|
#define task_pt_regs(tsk) ((struct pt_regs *) \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user