mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Shuai Xue <xueshuai@linux.alibaba.com>
To: Karl Mehltretter <kmehltretter@gmail.com>
Cc: palmer@dabbelt.com, pjw@kernel.org, aou@eecs.berkeley.edu,
	alex@ghiti.fr, linux-riscv@lists.infradead.org, oleg@redhat.com,
	rostedt@goodmis.org, mhiramat@kernel.org, mark.rutland@arm.com,
	peterz@infradead.org, mingo@redhat.com, acme@kernel.org,
	namhyung@kernel.org, alexander.shishkin@linux.intel.com,
	jolsa@kernel.org, irogers@google.com, adrian.hunter@intel.com,
	james.clark@linaro.org, jpoimboe@kernel.org, jikos@kernel.org,
	mbenes@suse.cz, pmladek@suse.com, joe.lawrence@redhat.com,
	shuah@kernel.org, mpdesouza@suse.com,
	oliver.yang@linux.alibaba.com, zhuo.song@linux.alibaba.com,
	jkchen@linux.alibaba.com, martin@kaiser.cx,
	linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	linux-perf-users@vger.kernel.org, live-patching@vger.kernel.org,
	linux-kselftest@vger.kernel.org
Subject: Re: [PATCH v6 5/7] riscv: stacktrace: switch to frame-pointer based unwinder
Date: Sat, 10 Oct 2026 11:38:45 +0800	[thread overview]
Message-ID: <2650577a-a359-495c-a6bf-47a825e9282a@linux.alibaba.com> (raw)
In-Reply-To: <20261009185904.82385-1-kmehltretter@gmail.com>



On 10/10/26 2:59 AM, Karl Mehltretter wrote:
> On Mon, Sep 14, 2026 at 05:26:46PM +0800, Shuai Xue wrote:
>> +noinline noinstr void arch_stack_walk(stack_trace_consume_fn consume_entry,
>> +				      void *cookie, struct task_struct *task,
>> +				      struct pt_regs *regs)
>> +{
>> +	struct kunwind_consume_entry_data data = {
>> +		.consume_entry = consume_entry,
>> +		.cookie = cookie,
>> +	};
>> +
>> +	kunwind_stack_walk(arch_kunwind_consume_entry, &data, task, regs);
>> +}
> 
> Hi Shuai Xue,
> 
> With this patch and FRAME_POINTER enabled, return_address() returns the
> caller one level further up than asked for.
> 
> return_address() in arch/riscv/kernel/return_address.c skips level + 3
> entries from arch_stack_walk(). The arm64 original skips level + 2. The
> third entry exists on mainline because the walk starts inside
> walk_stackframe() and first reports the return into arch_stack_walk().
> With 5/7 the walk starts at the caller of arch_stack_walk(), so
> level + 3 now skips a real caller. CALLER_ADDR1 and up are built on
> return_address(). The irqsoff tracer and the preemptirq tracepoints use
> them.
> 
> A KUnit test that calls ftrace_return_address() from
> leaf() <- middle() <- outer() <- check() returns:
> 
>               af32da41b032   with series   with series, level + 2
>    level 0    middle         outer         middle
>    level 1    outer          check         outer
> 
> The change to level + 2 has to depend on FRAME_POINTER. Without it the
> series keeps walk_stackframe() and the result is the same as on
> mainline. There, level + 2 makes return_address(0) return an address
> inside return_address().

Hi, Karl,

Nice point. Thank you for the thorough review and the KUnit test.
The analysis is spot on, and your table matches my reading of the code
exactly.

> 
> The same extra entry makes stack_trace_save() start one frame too early
> on mainline. 5/7 fixes that. I have a small fix for it on mainline,
> meant for stable kernels, which conflicts with 5/7. I would post it with
> you in Cc. Tell me if you would rather take the return_address.c change
> into 5/7 first.

Please go ahead with your mainline/stable fix for the
stack_trace_save() off-by-one as an independent patch. You are right
that this is a separate mainline bug: stack_trace_save() hardcodes
.skip = skipnr + 1, i.e. it expects the first entry reported by
arch_stack_walk() to be the return into stack_trace_save() itself, and
mainline's walk_stackframe() breaks that contract by reporting the
return into arch_stack_walk() first. A 7-patch series is not a vehicle
for stable, so the minimal fix is the right approach there.

Please keep me in Cc when you post it, I will review and test it.

> 
> Tested with clang 22 and the series applied on 52318cf0fa6e. The
> "with series" column is the same on QEMU's virt machine and on a
> BeagleV Ahead (TH1520). Everything else ran on QEMU only.

Thanks again for testing on real hardware (BeagleV Ahead) in addition
to QEMU, that is much appreciated.

Best regards,
Shuai Xue



  reply	other threads:[~2026-10-10  3:38 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-14  9:26 [PATCH v6 0/7] riscv: Add reliable stack unwinding for livepatch Shuai Xue
2026-09-14  9:26 ` [PATCH v6 1/7] riscv: stacktrace: Add frame record metadata Shuai Xue
2026-09-14  9:26 ` [PATCH v6 2/7] riscv: stacktrace: disable KASAN and KCOV instrumentation for stacktrace.o Shuai Xue
2026-09-14  9:26 ` [PATCH v6 3/7] riscv: ftrace: always preserve s0 in dynamic ftrace register frame Shuai Xue
2026-09-14  9:26 ` [PATCH v6 4/7] riscv: stacktrace: introduce stack-bound tracking helpers Shuai Xue
2026-09-14  9:26 ` [PATCH v6 5/7] riscv: stacktrace: switch to frame-pointer based unwinder Shuai Xue
2026-10-09 18:59   ` Karl Mehltretter
2026-10-10  3:38     ` Shuai Xue [this message]
2026-09-14  9:26 ` [PATCH v6 6/7] riscv: Kconfig: enable HAVE_RELIABLE_STACKTRACE and HAVE_LIVEPATCH Shuai Xue
2026-09-14  9:26 ` [PATCH v6 7/7] selftests/livepatch: Add RISC-V syscall wrapper prefix Shuai Xue
2026-09-29  7:28 ` [PATCH v6 0/7] riscv: Add reliable stack unwinding for livepatch Martin Kaiser
2026-10-08 11:42   ` Shuai Xue

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=2650577a-a359-495c-a6bf-47a825e9282a@linux.alibaba.com \
    --to=xueshuai@linux.alibaba.com \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=alex@ghiti.fr \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=aou@eecs.berkeley.edu \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jikos@kernel.org \
    --cc=jkchen@linux.alibaba.com \
    --cc=joe.lawrence@redhat.com \
    --cc=jolsa@kernel.org \
    --cc=jpoimboe@kernel.org \
    --cc=kmehltretter@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=martin@kaiser.cx \
    --cc=mbenes@suse.cz \
    --cc=mhiramat@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mpdesouza@suse.com \
    --cc=namhyung@kernel.org \
    --cc=oleg@redhat.com \
    --cc=oliver.yang@linux.alibaba.com \
    --cc=palmer@dabbelt.com \
    --cc=peterz@infradead.org \
    --cc=pjw@kernel.org \
    --cc=pmladek@suse.com \
    --cc=rostedt@goodmis.org \
    --cc=shuah@kernel.org \
    --cc=zhuo.song@linux.alibaba.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®