diff --git a/arch/arm/include/asm/stacktrace.h b/arch/arm/include/asm/stacktrace.h index e56503fd9447..3e78f921b8b2 100644 --- a/arch/arm/include/asm/stacktrace.h +++ b/arch/arm/include/asm/stacktrace.h @@ -21,16 +21,6 @@ struct stackframe { struct llist_node *kr_cur; struct task_struct *tsk; #endif -#ifdef CONFIG_ARM_UNWIND - /* - * This field is used to track the stack pointer value when calling - * __entry routines. This is needed when IRQ stacks and overflow stacks - * are used, because in that case, the struct pt_regs passed to these - * __entry routines may be at the top of the task stack, while we are - * executing from another stack. - */ - unsigned long sp_low; -#endif }; static __always_inline diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 08612032aefe..a4938b699b49 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c @@ -87,8 +87,7 @@ void dump_backtrace_entry(unsigned long where, unsigned long from, loglvl, where, from); #endif - if (!IS_ENABLED(CONFIG_UNWINDER_ARM) && - in_entry_text(from) && end <= ALIGN(frame, THREAD_SIZE)) + if (in_entry_text(from) && end <= ALIGN(frame, THREAD_SIZE)) dump_mem(loglvl, "Exception stack", frame + 4, end); } diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c index 3cd8892ed52b..e619ec7856b7 100644 --- a/arch/arm/kernel/unwind.c +++ b/arch/arm/kernel/unwind.c @@ -29,7 +29,6 @@ #include #include -#include #include #include #include @@ -424,7 +423,6 @@ int unwind_frame(struct stackframe *frame) */ if (frame->pc == frame->lr) return -URC_FAILURE; - frame->sp_low = frame->sp; frame->pc = frame->lr; return URC_OK; } else if ((idx->insn & 0x80000000) == 0) @@ -476,7 +474,6 @@ int unwind_frame(struct stackframe *frame) frame->sp = ctrl.vrs[SP]; frame->lr = ctrl.vrs[LR]; frame->pc = ctrl.vrs[PC]; - frame->sp_low = ctrl.sp_low; frame->lr_addr = ctrl.lr_addr; return URC_OK; @@ -526,11 +523,7 @@ here: urc = unwind_frame(&frame); if (urc < 0) break; - if (in_entry_text(where)) - dump_mem(loglvl, "Exception stack", frame.sp_low, - frame.sp_low + sizeof(struct pt_regs)); - - dump_backtrace_entry(where, frame.pc, 0, loglvl); + dump_backtrace_entry(where, frame.pc, frame.sp - 4, loglvl); } }