Commit 1149aad1 authored by Kefeng Wang's avatar Kefeng Wang Committed by Will Deacon

arm64: Add dump_backtrace() in show_regs

Generic code expects show_regs() to dump the stack, but arm64's
show_regs() does not. This makes it hard to debug softlockups and
other issues that result in show_regs() being called.

This patch updates arm64's show_regs() to dump the stack, as common
code expects.
Acked-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarKefeng Wang <wangkefeng.wang@huawei.com>
[will: folded in bug_handler fix from mrutland]
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent c07ab957
...@@ -30,5 +30,6 @@ struct stackframe { ...@@ -30,5 +30,6 @@ struct stackframe {
extern int unwind_frame(struct task_struct *tsk, struct stackframe *frame); extern int unwind_frame(struct task_struct *tsk, struct stackframe *frame);
extern void walk_stackframe(struct task_struct *tsk, struct stackframe *frame, extern void walk_stackframe(struct task_struct *tsk, struct stackframe *frame,
int (*fn)(struct stackframe *, void *), void *data); int (*fn)(struct stackframe *, void *), void *data);
extern void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk);
#endif /* __ASM_STACKTRACE_H */ #endif /* __ASM_STACKTRACE_H */
...@@ -210,6 +210,7 @@ void __show_regs(struct pt_regs *regs) ...@@ -210,6 +210,7 @@ void __show_regs(struct pt_regs *regs)
void show_regs(struct pt_regs * regs) void show_regs(struct pt_regs * regs)
{ {
__show_regs(regs); __show_regs(regs);
dump_backtrace(regs, NULL);
} }
static void tls_thread_flush(void) static void tls_thread_flush(void)
......
...@@ -140,7 +140,7 @@ static void dump_instr(const char *lvl, struct pt_regs *regs) ...@@ -140,7 +140,7 @@ static void dump_instr(const char *lvl, struct pt_regs *regs)
} }
} }
static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk) void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)
{ {
struct stackframe frame; struct stackframe frame;
unsigned long irq_stack_ptr; unsigned long irq_stack_ptr;
...@@ -728,8 +728,6 @@ static int bug_handler(struct pt_regs *regs, unsigned int esr) ...@@ -728,8 +728,6 @@ static int bug_handler(struct pt_regs *regs, unsigned int esr)
break; break;
case BUG_TRAP_TYPE_WARN: case BUG_TRAP_TYPE_WARN:
/* Ideally, report_bug() should backtrace for us... but no. */
dump_backtrace(regs, NULL);
break; break;
default: default:
......
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