From: Xiaofeng Yuan <yuanxiaofeng@eswincomputing.com>
To: Nam Cao <namcao@linutronix.de>, Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>,
linux-riscv@lists.infradead.org,
Xiaofeng Yuan <yuanxiaofeng@eswincomputing.com>
Subject: [PATCH v3 0/2] riscv: kprobes: simulate nop and c.nop instructions
Date: Wed, 2 Sep 2026 16:08:15 +0800 [thread overview]
Message-ID: <20260902080817.681-1-yuanxiaofeng@eswincomputing.com> (raw)
Per-hit XOL out-of-line execution of a probed nop costs an extra
exception round-trip (the slot's trailing breakpoint traps back into
the kernel), and for uprobes that round-trip is a full
kernel<->userspace one. Since these instructions have no
architectural effect, simply advance the program counter inside the
breakpoint handler instead. riscv_probe_decode_insn() is shared by
kprobes and uprobes, so both benefit. It primarily matters for
uprobes on USDT sites: under the SystemTap SDT ABI, the recorded
probe location is by construction a plain nop or c.nop.
patch 1: simulate nop and c.nop in the breakpoint handler.
patch 2: extend the RISC-V kprobes KUnit test to cover both.
Measured on QEMU (RISC-V virt, emulated): per-hit cost of a uprobe
on a USDT-style nop site drops by roughly 80 percent; a kprobe on a
nop by roughly 40 percent. (arm64 commit ac4ad5c09b34 measured ~2x
on real arm64 hardware for the same class of change.)
Changes since v2:
- patch 1: no code change; commit message reworked per Nam Cao's
review:
- dropped the kernel-text nop motivation (jump_label text sites
cannot be kprobed; register_kprobe() rejects them via
jump_label_text_reserved()), and the mcount claim (the function
entry instruction is an auipc; the nop sits at +4 only).
- corrected the attribution of the arm64 prior: ac4ad5c09b34 was
motivated by uprobe/USDT benchmarks, not by a generic "single
step is slow" claim.
- described the per-hit saving precisely in XOL terms (one extra
exception round-trip; for uprobes a full kernel<->userspace one).
- added a USDT-form uprobe measurement (ftrace uprobe event,
emulated QEMU), in the style of the arm64 series numbers.
- patch 2: unchanged.
Changes since v1:
- patch 1: add use-case justification and benchmark result to the
commit message.
- patch 2: simplify test functions to load KPROBE_TEST_MAGIC
directly (per review).
Verified by cross-compiling for RISC-V and running the kprobes KUnit
test in QEMU (ok 1 kprobes_riscv).
Xiaofeng Yuan (2):
riscv: kprobes: simulate nop and c.nop instructions
riscv: kprobes: add nop and c.nop to the KUnit test
arch/riscv/include/asm/insn.h | 11 +++++++++
arch/riscv/kernel/probes/decode-insn.c | 6 +++++
arch/riscv/kernel/probes/simulate-insn.c | 14 +++++++++++
arch/riscv/kernel/probes/simulate-insn.h | 2 ++
.../kernel/tests/kprobes/test-kprobes-asm.S | 23 +++++++++++++++++++
5 files changed, 56 insertions(+)
--
2.43.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next reply other threads:[~2026-09-02 8:08 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-02 8:08 Xiaofeng Yuan [this message]
2026-09-02 8:08 ` [PATCH v3 1/2] riscv: kprobes: simulate nop and c.nop instructions Xiaofeng Yuan
2026-09-02 8:08 ` [PATCH v3 2/2] riscv: kprobes: add nop and c.nop to the KUnit test Xiaofeng Yuan
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=20260902080817.681-1-yuanxiaofeng@eswincomputing.com \
--to=yuanxiaofeng@eswincomputing.com \
--cc=aou@eecs.berkeley.edu \
--cc=linux-riscv@lists.infradead.org \
--cc=namcao@linutronix.de \
--cc=palmer@dabbelt.com \
--cc=pjw@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.