From: Jisheng Zhang <jszhang@kernel.org>
To: Karl Mehltretter <kmehltretter@gmail.com>
Cc: Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Charlie Jenkins <thecharlesjenkins@gmail.com>,
Thomas Gleixner <tglx@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] riscv: entry: Mark ret_from_fork_kernel() and ret_from_fork_user() noinstr
Date: Sun, 8 Nov 2026 09:55:20 +0800 [thread overview]
Message-ID: <au_WiGUxh1mROgKY@xhacker> (raw)
In-Reply-To: <20261107194931.69176-1-kmehltretter@gmail.com>
On Sat, Nov 07, 2026 at 08:49:31PM +0100, Karl Mehltretter wrote:
> ret_from_fork_kernel() and ret_from_fork_user() are traceable and
> return after syscall_exit_to_user_mode() enters the RCU extended
> quiescent state via user_enter_irqoff() on NO_HZ_FULL CPUs. When
> function_graph tracing is enabled with
> FTRACE_VALIDATE_RCU_IS_WATCHING, the return hook runs after RCU stops
> watching and triggers the ftrace_return_to_handler() warning.
>
> Mark ret_from_fork_kernel() and ret_from_fork_user() noinstr and bracket
> the kernel thread callback with instrumentation_begin() and
> instrumentation_end().
>
> Fixes: f955aa8723a6 ("riscv: entry: Convert ret_from_fork() to C")
> Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
> ---
> Assisted by an LLM.
>
> Tested on v7.4-rc1 (d48723711bae) under QEMU riscv64 (-smp 4) with
> NO_HZ_FULL, FTRACE_VALIDATE_RCU_IS_WATCHING, PROVE_LOCKING,
> nohz_full=1-3 rcu_nocbs=1-3 on the kernel command line, and
> function_graph tracing during parallel fork bursts across CPUs 0-3.
> Without this patch, two consecutive runs trigger:
> RCU not on for: ret_from_fork_user+0x4/0x368
> WARNING: include/linux/trace_recursion.h:132 at ftrace_return_to_handler+0x2e0/0x2f0, CPU#2
> followed by an observed kernel paging request Oops in
> ftrace_graph_ret_addr() while unwinding the warning backtrace.
> With this patch, two consecutive runs complete without the
> ftrace_return_to_handler() warning or unwind fault.
>
> arch/riscv/kernel/process.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
> index 34c1d498d1cad..10c1bee77145f 100644
> --- a/arch/riscv/kernel/process.c
> +++ b/arch/riscv/kernel/process.c
> @@ -225,14 +225,17 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
> return 0;
> }
>
> -asmlinkage void ret_from_fork_kernel(void *fn_arg, int (*fn)(void *), struct pt_regs *regs)
> +asmlinkage void noinstr ret_from_fork_kernel(void *fn_arg, int (*fn)(void *),
> + struct pt_regs *regs)
> {
> + instrumentation_begin();
since riscv has no objtool support, this can be removed.
> fn(fn_arg);
> + instrumentation_end();
>
> syscall_exit_to_user_mode(regs);
> }
>
> -asmlinkage void ret_from_fork_user(struct pt_regs *regs)
> +asmlinkage void noinstr ret_from_fork_user(struct pt_regs *regs)
> {
> syscall_exit_to_user_mode(regs);
> }
> base-commit: d48723711bae9b8cdc56719c448ba42fef28cbee
>
> --
> 2.39.5 (Apple Git-154)
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Jisheng Zhang <jszhang@kernel.org>
To: Karl Mehltretter <kmehltretter@gmail.com>
Cc: Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Charlie Jenkins <thecharlesjenkins@gmail.com>,
Thomas Gleixner <tglx@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] riscv: entry: Mark ret_from_fork_kernel() and ret_from_fork_user() noinstr
Date: Sun, 8 Nov 2026 09:55:20 +0800 [thread overview]
Message-ID: <au_WiGUxh1mROgKY@xhacker> (raw)
In-Reply-To: <20261107194931.69176-1-kmehltretter@gmail.com>
On Sat, Nov 07, 2026 at 08:49:31PM +0100, Karl Mehltretter wrote:
> ret_from_fork_kernel() and ret_from_fork_user() are traceable and
> return after syscall_exit_to_user_mode() enters the RCU extended
> quiescent state via user_enter_irqoff() on NO_HZ_FULL CPUs. When
> function_graph tracing is enabled with
> FTRACE_VALIDATE_RCU_IS_WATCHING, the return hook runs after RCU stops
> watching and triggers the ftrace_return_to_handler() warning.
>
> Mark ret_from_fork_kernel() and ret_from_fork_user() noinstr and bracket
> the kernel thread callback with instrumentation_begin() and
> instrumentation_end().
>
> Fixes: f955aa8723a6 ("riscv: entry: Convert ret_from_fork() to C")
> Signed-off-by: Karl Mehltretter <kmehltretter@gmail.com>
> ---
> Assisted by an LLM.
>
> Tested on v7.4-rc1 (d48723711bae) under QEMU riscv64 (-smp 4) with
> NO_HZ_FULL, FTRACE_VALIDATE_RCU_IS_WATCHING, PROVE_LOCKING,
> nohz_full=1-3 rcu_nocbs=1-3 on the kernel command line, and
> function_graph tracing during parallel fork bursts across CPUs 0-3.
> Without this patch, two consecutive runs trigger:
> RCU not on for: ret_from_fork_user+0x4/0x368
> WARNING: include/linux/trace_recursion.h:132 at ftrace_return_to_handler+0x2e0/0x2f0, CPU#2
> followed by an observed kernel paging request Oops in
> ftrace_graph_ret_addr() while unwinding the warning backtrace.
> With this patch, two consecutive runs complete without the
> ftrace_return_to_handler() warning or unwind fault.
>
> arch/riscv/kernel/process.c | 7 +++++--
> 1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/arch/riscv/kernel/process.c b/arch/riscv/kernel/process.c
> index 34c1d498d1cad..10c1bee77145f 100644
> --- a/arch/riscv/kernel/process.c
> +++ b/arch/riscv/kernel/process.c
> @@ -225,14 +225,17 @@ int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src)
> return 0;
> }
>
> -asmlinkage void ret_from_fork_kernel(void *fn_arg, int (*fn)(void *), struct pt_regs *regs)
> +asmlinkage void noinstr ret_from_fork_kernel(void *fn_arg, int (*fn)(void *),
> + struct pt_regs *regs)
> {
> + instrumentation_begin();
since riscv has no objtool support, this can be removed.
> fn(fn_arg);
> + instrumentation_end();
>
> syscall_exit_to_user_mode(regs);
> }
>
> -asmlinkage void ret_from_fork_user(struct pt_regs *regs)
> +asmlinkage void noinstr ret_from_fork_user(struct pt_regs *regs)
> {
> syscall_exit_to_user_mode(regs);
> }
> base-commit: d48723711bae9b8cdc56719c448ba42fef28cbee
>
> --
> 2.39.5 (Apple Git-154)
>
>
> _______________________________________________
> linux-riscv mailing list
> linux-riscv@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-11-08 2:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-07 19:49 [PATCH] riscv: entry: Mark ret_from_fork_kernel() and ret_from_fork_user() noinstr Karl Mehltretter
2026-11-07 19:49 ` Karl Mehltretter
2026-11-08 1:55 ` Jisheng Zhang [this message]
2026-11-08 1:55 ` Jisheng Zhang
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=au_WiGUxh1mROgKY@xhacker \
--to=jszhang@kernel.org \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=kmehltretter@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@kernel.org \
--cc=thecharlesjenkins@gmail.com \
/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.