Commit bee4e1fd authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Russell King (Oracle)

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 4ab68270.
Signed-off-by: default avatarArd Biesheuvel <ardb@kernel.org>
Signed-off-by: default avatarRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
parent 7a8ca84a
......@@ -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
......
......@@ -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);
}
......
......@@ -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 @@ void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk,
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);
}
}
......
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