summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/include/asm/stacktrace.h10
-rw-r--r--arch/arm/kernel/traps.c3
-rw-r--r--arch/arm/kernel/unwind.c9
3 files changed, 2 insertions, 20 deletions
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 <linux/spinlock.h>
#include <linux/list.h>
-#include <asm/sections.h>
#include <asm/stacktrace.h>
#include <asm/traps.h>
#include <asm/unwind.h>
@@ -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);
}
}