From: Shuai Xue <xueshuai@linux.alibaba.com>
To: palmer@dabbelt.com, pjw@kernel.org, aou@eecs.berkeley.edu
Cc: 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, martin@kaiser.cx,
kmehltretter@gmail.com, oliver.yang@linux.alibaba.com,
zhuo.song@linux.alibaba.com, xueshuai@linux.alibaba.com,
jkchen@linux.alibaba.com, 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: [PATCH v7 00/10] riscv: Add reliable stack unwinding for livepatch
Date: Tue, 10 Nov 2026 09:37:40 +0800 [thread overview]
Message-ID: <20261110013750.36800-1-xueshuai@linux.alibaba.com> (raw)
In-Reply-To: <20260914092648.51254-1-xueshuai@linux.alibaba.com>
Hi,
This is v7 of the RISC-V reliable stack unwinding series for livepatch.
The series starts with three standalone fixes for the existing stack
walkers: Karl Mehltretter's fix for arch_stack_walk() reporting the
walker's own frame, its KUnit test, and a fix for the function-graph
return-address cookie that Martin Kaiser asked to be split out. The
main part of the series then adds explicit frame-record metadata,
preserves the frame pointer through dynamic ftrace, replaces the
open-coded stack walker with a conservative frame-pointer based
unwinder, enables the RISC-V livepatch capability and adds the
syscall-wrapper selftest prefix.
Changes since v6:
* Rebase onto the current riscv/for-next (based on 7.4-rc1).
* Fold in Karl Mehltretter's two patches [1] as 1/10 and 2/10. Patch
1/10 stops arch_stack_walk() from reporting the walker's own frame as
the first entry, which corrupts the skip-frame accounting of
stack_trace_save() users (page_owner, perf), and adjusts
return_address() level accounting accordingly. Patch 2/10 adds a KUnit
test for the start frames. Both patches keep their original authorship;
I added my Reviewed-by/Tested-by and sign-off. I asked Karl on
3 November whether he would like to see his patches folded into this
series; he has not replied so far. Since 8/10 reuses the walker
extraction from 1/10 for its !CONFIG_FRAME_POINTER fallback, his
patches are included here to keep the series self-contained.
* Split the function-graph return-address cookie change out of the old
5/7, as suggested by Martin Kaiser. It is now a separate patch (3/10)
that also fixes the old walker's cookie key, so it stands on its own
without the rest of the series and can be picked independently; it is
marked Fixes: and Cc: stable.
* Reworked the !CONFIG_FRAME_POINTER fallback of the unwinder switch
patch (8/10) to use the __always_inline __walk_stackframe() helper
from 1/10, so both walkers report the same start frame.
* Collected tags from the v6 review thread: Reviewed-by and Tested-by:
Martin Kaiser for the patches carried over from v6 (rv64 QEMU and
rv64 CHERI builds, livepatch working on both).
The patches carried over from v6 are unchanged, except for the
reworked !CONFIG_FRAME_POINTER fallback in 8/10, so the v6 validation
results still apply to them. The v7-specific changes were covered by
the fresh build and boot runs described below:
* Built with riscv64-unknown-linux-gnu-gcc 15.2.0 and binutils 2.46,
including a CONFIG_IRQ_STACKS=n variant.
* QEMU 8.2.2, 1 and 4 CPUs: livepatch selftests PASS: 7, SKIP: 1,
FAIL: 0; ftrace function graph 3 passed, 0 failed, 3 unsupported.
* No BUG, WARNING, Oops, panic, unreliable stack or Call Trace found by
the validation log scans.
Patches 1-2/10 were tested by Karl with the KUnit suite from 2/10 on
QEMU's virt machine with clang 22 (LLVM=1) and GCC 15.2, and on a
BeagleV Ahead (TH1520), where all five test cases pass.
In addition, the combined v7 tree was freshly built and booted:
* Built with riscv64-unknown-linux-gnu-gcc 16.2.0 on top of 7.4-rc1:
a full livepatch configuration (CONFIG_LIVEPATCH=y with dynamic ftrace
and function graph tracer) and a !CONFIG_FRAME_POINTER variant both
link successfully.
* QEMU 11.1.1, rv64 virt, 4 CPUs: the KUnit suite from 2/10 passes
5/5 on the frame-pointer build; the !CONFIG_FRAME_POINTER build boots
and its panic backtrace (no initramfs, by design) unwinds cleanly.
Base:
riscv/for-next 6628e7d4c6b2 ("Linux 7.4-rc1")
Previous versions:
v6: https://lore.kernel.org/r/20260914092648.51254-1-xueshuai@linux.alibaba.com
v5: https://lore.kernel.org/r/20260804103626.2803112-1-wanghan@linux.alibaba.com
v4 RESEND: https://lore.kernel.org/r/20260629072713.3273743-1-wanghan@linux.alibaba.com
v3: https://lore.kernel.org/r/cover.194d76e3a15b.v3.riscv-livepatch.wanghan@linux.alibaba.com
v2: https://lore.kernel.org/r/20260528082310.1994388-1-wanghan@linux.alibaba.com
v1: https://lore.kernel.org/r/20260527123530.2593918-1-wanghan@linux.alibaba.com
[1] https://lore.kernel.org/r/20261010132712.46931-1-kmehltretter@gmail.com
Karl Mehltretter (2):
riscv: stacktrace: do not report the walker's own frame from
arch_stack_walk()
riscv: Add KUnit test for stack trace start frames
Shuai Xue (1):
riscv: ftrace: use the frame pointer as the function graph
return-address cookie
Wang Han (7):
riscv: stacktrace: Add frame record metadata
riscv: stacktrace: disable KASAN and KCOV instrumentation for
stacktrace.o
riscv: ftrace: always preserve s0 in dynamic ftrace register frame
riscv: stacktrace: introduce stack-bound tracking helpers
riscv: stacktrace: switch to frame-pointer based unwinder
riscv: Kconfig: enable HAVE_RELIABLE_STACKTRACE and HAVE_LIVEPATCH
selftests/livepatch: Add RISC-V syscall wrapper prefix
arch/riscv/Kconfig | 4 +
arch/riscv/include/asm/ptrace.h | 9 +
arch/riscv/include/asm/stacktrace.h | 67 ++-
arch/riscv/include/asm/stacktrace/common.h | 159 +++++
arch/riscv/include/asm/stacktrace/frame.h | 53 ++
arch/riscv/kernel/Makefile | 6 +
arch/riscv/kernel/asm-offsets.c | 6 +
arch/riscv/kernel/entry.S | 39 +-
arch/riscv/kernel/ftrace.c | 6 +-
arch/riscv/kernel/head.S | 23 +
arch/riscv/kernel/mcount-dyn.S | 4 -
arch/riscv/kernel/perf_callchain.c | 2 +-
arch/riscv/kernel/process.c | 33 +-
arch/riscv/kernel/return_address.c | 2 +-
arch/riscv/kernel/stacktrace.c | 583 +++++++++++++++---
arch/riscv/kernel/tests/Kconfig.debug | 12 +
arch/riscv/kernel/tests/Makefile | 1 +
arch/riscv/kernel/tests/stacktrace_test.c | 142 +++++
.../livepatch/test_modules/test_klp_syscall.c | 2 +
19 files changed, 1043 insertions(+), 110 deletions(-)
create mode 100644 arch/riscv/include/asm/stacktrace/common.h
create mode 100644 arch/riscv/include/asm/stacktrace/frame.h
create mode 100644 arch/riscv/kernel/tests/stacktrace_test.c
base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
--
2.39.3
next prev parent reply other threads:[~2026-11-10 1:37 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 9:26 [PATCH v6 0/7] " 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
2026-10-13 20:18 ` Martin Kaiser
2026-10-14 13:09 ` Shuai Xue
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
2026-10-12 8:44 ` Martin Kaiser
2026-11-10 1:37 ` Shuai Xue [this message]
2026-11-10 1:37 ` [PATCH v7 01/10] riscv: stacktrace: do not report the walker's own frame from arch_stack_walk() Shuai Xue
2026-11-10 1:37 ` [PATCH v7 02/10] riscv: Add KUnit test for stack trace start frames Shuai Xue
2026-11-10 1:37 ` [PATCH v7 03/10] riscv: ftrace: use the frame pointer as the function graph return-address cookie Shuai Xue
2026-11-10 1:37 ` [PATCH v7 04/10] riscv: stacktrace: Add frame record metadata Shuai Xue
2026-11-10 1:37 ` [PATCH v7 05/10] riscv: stacktrace: disable KASAN and KCOV instrumentation for stacktrace.o Shuai Xue
2026-11-10 1:37 ` [PATCH v7 06/10] riscv: ftrace: always preserve s0 in dynamic ftrace register frame Shuai Xue
2026-11-10 1:37 ` [PATCH v7 07/10] riscv: stacktrace: introduce stack-bound tracking helpers Shuai Xue
2026-11-10 1:37 ` [PATCH v7 08/10] riscv: stacktrace: switch to frame-pointer based unwinder Shuai Xue
2026-11-10 1:37 ` [PATCH v7 09/10] riscv: Kconfig: enable HAVE_RELIABLE_STACKTRACE and HAVE_LIVEPATCH Shuai Xue
2026-11-10 1:37 ` [PATCH v7 10/10] selftests/livepatch: Add RISC-V syscall wrapper prefix Shuai Xue
2026-11-10 6:35 ` [PATCH v7 00/10] riscv: Add reliable stack unwinding for livepatch Karl Mehltretter
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=20261110013750.36800-1-xueshuai@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®