Commit dc39455e authored by Kyle McMartin's avatar Kyle McMartin

[PARISC] clean up show_stack

When we show_regs, we obviously have a struct pt_regs of the calling
frame. Use these in show_stack so we don't have the entire bogus call trace
up to the show_stack call.
Signed-off-by: default avatarKyle McMartin <kyle@mcmartin.ca>
parent b23f5baa
...@@ -51,6 +51,9 @@ ...@@ -51,6 +51,9 @@
DEFINE_SPINLOCK(pa_dbit_lock); DEFINE_SPINLOCK(pa_dbit_lock);
#endif #endif
void parisc_show_stack(struct task_struct *t, unsigned long *sp,
struct pt_regs *regs);
static int printbinary(char *buf, unsigned long x, int nbits) static int printbinary(char *buf, unsigned long x, int nbits)
{ {
unsigned long mask = 1UL << (nbits - 1); unsigned long mask = 1UL << (nbits - 1);
...@@ -149,7 +152,7 @@ void show_regs(struct pt_regs *regs) ...@@ -149,7 +152,7 @@ void show_regs(struct pt_regs *regs)
printk(level); printk(level);
print_symbol(" RP(r2): %s\n", regs->gr[2]); print_symbol(" RP(r2): %s\n", regs->gr[2]);
dump_stack(); parisc_show_stack(current, NULL, regs);
} }
...@@ -183,11 +186,19 @@ static void do_show_stack(struct unwind_frame_info *info) ...@@ -183,11 +186,19 @@ static void do_show_stack(struct unwind_frame_info *info)
printk("\n"); printk("\n");
} }
void show_stack(struct task_struct *task, unsigned long *s) void parisc_show_stack(struct task_struct *task, unsigned long *sp,
struct pt_regs *regs)
{ {
struct unwind_frame_info info; struct unwind_frame_info info;
struct task_struct *t;
t = task ? task : current;
if (regs) {
unwind_frame_init(&info, t, regs);
goto show_stack;
}
if (!task) { if (t == current) {
unsigned long sp; unsigned long sp;
HERE: HERE:
...@@ -203,12 +214,18 @@ void show_stack(struct task_struct *task, unsigned long *s) ...@@ -203,12 +214,18 @@ void show_stack(struct task_struct *task, unsigned long *s)
unwind_frame_init(&info, current, &r); unwind_frame_init(&info, current, &r);
} }
} else { } else {
unwind_frame_init_from_blocked_task(&info, task); unwind_frame_init_from_blocked_task(&info, t);
} }
show_stack:
do_show_stack(&info); do_show_stack(&info);
} }
void show_stack(struct task_struct *t, unsigned long *sp)
{
return parisc_show_stack(t, sp, NULL);
}
int is_valid_bugaddr(unsigned long iaoq) int is_valid_bugaddr(unsigned long iaoq)
{ {
return 1; return 1;
......
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