From: Mark Rutland <mark.rutland@arm.com>
To: Hongyan Xia <hongyan.xia@transsion.com>
Cc: Will Deacon <will@kernel.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Catalin Marinas <catalin.marinas@arm.com>,
Jiazi Li <jiazi.li@transsion.com>, Pu Hu <hupu@transsion.com>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [RFC PATCH 2/9] arm64/entry: Make debug_exception_enter/exit() noinstr
Date: Fri, 31 Jul 2026 15:43:51 +0100 [thread overview]
Message-ID: <amy0p2p2QMZtexhz@J2N7QTR9R3> (raw)
In-Reply-To: <774d423f462ff2c245e5f796dad98dd1740fa5f7.1785153469.git.hongyan.xia@transsion.com>
On Mon, Jul 27, 2026 at 12:25:36PM +0000, Hongyan Xia wrote:
> From: Hongyan Xia <hongyan.xia@transsion.com>
>
> Commit 879a6754d3d11e30af24b7dc486f561510d62641 ran into a crash because
> debug_exception_enter/exit() triggered page faults caused by perf dwarf
> call graph tracing. That patch was a band-aid on top. Instead of trying
> to band-aid all possible paths that can happen during instrumentation or
> perf tracing, simply make both functions noinstr.
>
> Drop the RCU_LOCKDEP_WARN(): arm64_enter_el1_dbg() runs first and
> enters NMI context via ct_nmi_enter(), so RCU is always watching by the
> time debug_exception_enter() runs.
>
> Signed-off-by: Hongyan Xia <hongyan.xia@transsion.com>
> ---
> arch/arm64/kernel/entry-common.c | 24 +++++++++++++++---------
> 1 file changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm64/kernel/entry-common.c b/arch/arm64/kernel/entry-common.c
> index 466529cce1c3..f06b5e2437cd 100644
> --- a/arch/arm64/kernel/entry-common.c
> +++ b/arch/arm64/kernel/entry-common.c
> @@ -293,20 +293,26 @@ static __always_inline void fpsimd_syscall_exit(void)
> * accidentally schedule in exception context and it will force a warning
> * if we somehow manage to schedule by accident.
> */
> -static void debug_exception_enter(struct pt_regs *regs)
> +static void noinstr debug_exception_enter(struct pt_regs *regs)
> {
> - preempt_disable();
> -
> - /* This code is a bit fragile. Test it. */
> - RCU_LOCKDEP_WARN(!rcu_is_watching(), "exception_enter didn't work");
> + /*
> + * debug_exception_enter/exit() can be quite delicate. The normal
> + * preempt_disable/enable() can be instrumented or traced by perf,
> + * which leads to a can of worms including triggering page faults.
> + *
> + * Instead of trying to make all of them work properly here, just
> + * open-code the simpler version of preempt_disable/enable() and make
> + * enter/exit() both noinstr to avoid the entire complexity.
> + */
> + __preempt_count_inc();
> + barrier();
> }
> -NOKPROBE_SYMBOL(debug_exception_enter);
This is an open-coded version of preempt_disable_notrace(), and there's
no reason the existing code needs to be out-of-line in the first place.
Please make this:
static __always_inline void debug_exception_enter(struct pt_regs *regs)
{
preempt_disable_notrace();
}
> -static void debug_exception_exit(struct pt_regs *regs)
> +static void noinstr debug_exception_exit(struct pt_regs *regs)
> {
> - preempt_enable_no_resched();
> + barrier();
> + __preempt_count_dec();
> }
> -NOKPROBE_SYMBOL(debug_exception_exit);
Similarly, this is an open-coded copy of
preempt_enable_no_resched_notrace(). Please make this:
static __always_inline void debug_exception_exit(struct pt_regs *regs)
{
preempt_enable_no_resched_notrace();
}
In both cases I'm happy with keeping the regs argument for now.
Mark.
next prev parent reply other threads:[~2026-07-31 14:43 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-27 12:23 [RFC PATCH 0/9] arm64: Make the kprobes debug exception path noinstr Hongyan Xia
2026-07-27 12:25 ` [RFC PATCH 1/9] arm64/entry: Bound certain debug exception paths in instrumentation windows Hongyan Xia
2026-07-31 14:41 ` Mark Rutland
2026-07-27 12:25 ` [RFC PATCH 2/9] arm64/entry: Make debug_exception_enter/exit() noinstr Hongyan Xia
2026-07-31 14:43 ` Mark Rutland [this message]
2026-07-27 12:25 ` [RFC PATCH 3/9] arm64/debug-monitors: Make do_el1_brk64()/do_el1_softstep() noinstr Hongyan Xia
2026-07-31 15:25 ` Mark Rutland
2026-07-27 12:25 ` [RFC PATCH 4/9] arm64/kprobes: Make the single-step machinery noinstr Hongyan Xia
2026-07-31 15:38 ` Mark Rutland
2026-07-31 15:38 ` Mark Rutland
2026-07-27 12:25 ` [RFC PATCH 5/9] arm64/kprobes: Invoke pre/post handlers inside instrumentation Hongyan Xia
2026-07-31 15:44 ` Mark Rutland
2026-07-27 12:25 ` [RFC PATCH 6/9] arm64/kprobes: Make kprobe_fault_handler() noinstr Hongyan Xia
2026-07-31 15:57 ` Mark Rutland
2026-07-27 12:25 ` [RFC PATCH 7/9] arm64/kprobes: Drop the KPROBE_HIT_SS reentry special case Hongyan Xia
2026-07-27 12:25 ` [RFC PATCH 8/9] arm64/kprobes: Drop the XOL single-step fault PC check Hongyan Xia
2026-07-31 16:12 ` Mark Rutland
2026-07-27 12:25 ` [RFC PATCH 9/9] arm64/debug: Mark debug exception helpers __always_inline Hongyan Xia
2026-07-27 19:22 ` Nick Desaulniers
2026-07-27 21:49 ` Will Deacon
2026-07-28 2:03 ` Hongyan Xia
2026-07-29 18:08 ` Steven Rostedt
2026-07-30 0:03 ` Masami Hiramatsu
2026-07-30 11:50 ` Hongyan Xia
2026-07-31 16:15 ` Mark Rutland
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=amy0p2p2QMZtexhz@J2N7QTR9R3 \
--to=mark.rutland@arm.com \
--cc=catalin.marinas@arm.com \
--cc=hongyan.xia@transsion.com \
--cc=hupu@transsion.com \
--cc=jiazi.li@transsion.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhiramat@kernel.org \
--cc=will@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.