summaryrefslogtreecommitdiff
path: root/arch/arm/kernel
diff options
context:
space:
mode:
authorArd Biesheuvel <ardb@kernel.org>2022-03-10 18:05:28 +0100
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>2022-03-11 13:00:55 +0000
commitbee4e1fdc31223f8e0569370635ced223a1dd2ce (patch)
tree76dd2e5d42902bcebafa3caf4b303226dcbf79f3 /arch/arm/kernel
parent7a8ca84a258a79e564b77b1bbb139f3f561d149b (diff)
ARM: Revert "unwind: dump exception stack from calling frame"
After simplifying the stack switch code in the IRQ exception handler by deferring the actual stack switch to call_with_stack(), we no longer need to special case the way we dump the exception stack, since it will always be at the top of whichever stack was active when the exception was taken. So revert this special handling for the ARM unwinder. This reverts commit 4ab6827081c63b83011a18d8e27f621ed34b1194. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Diffstat (limited to 'arch/arm/kernel')
-rw-r--r--arch/arm/kernel/traps.c3
-rw-r--r--arch/arm/kernel/unwind.c9
2 files changed, 2 insertions, 10 deletions
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);
}
}