From: Ard Biesheuvel <ardb@kernel.org>
To: linux@armlinux.org.uk
Cc: naresh.kamboju@linaro.org, linux-arm-kernel@lists.infradead.org,
Ard Biesheuvel <ardb@kernel.org>
Subject: [PATCH] ARM: Revert "unwind: dump exception stack from calling frame"
Date: Thu, 10 Mar 2022 18:05:28 +0100 [thread overview]
Message-ID: <20220310170528.3146323-1-ardb@kernel.org> (raw)
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>
---
arch/arm/include/asm/stacktrace.h | 10 ----------
arch/arm/kernel/traps.c | 3 +--
arch/arm/kernel/unwind.c | 9 +--------
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 8153282dadce..4f661aa3809c 100644
--- a/arch/arm/kernel/traps.c
+++ b/arch/arm/kernel/traps.c
@@ -89,8 +89,7 @@ void dump_backtrace_entry(unsigned long where, unsigned long from,
printk("%s %ps from %pS\n", loglvl, (void *)where, (void *)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 @@ 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);
}
}
--
2.30.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
reply other threads:[~2022-03-10 17:07 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220310170528.3146323-1-ardb@kernel.org \
--to=ardb@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux@armlinux.org.uk \
--cc=naresh.kamboju@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).