Hi Sahil,

Thanks for updating! Could you check Sashiko's comments on the series?

https://sashiko.dev/#/patchset/20260930203129.51048-1-sahilcdq0%40gmail.com

I need OpenRISC maintainer's review for this series too.

Thank you,

On Thu, 01 Oct 2026 02:01:25 +0530, Sahil Siddiq <[email protected]> wrote:
> Hi,
>
> Apologies for the delay. This is v2 of the patch series to add KProbe
> support for OpenRISC.
>
> The series also adds support for Kretprobes (which depends on the rethook
> framework [1]). Kretprobes are fired on function return.
>
> In order to build the kernel with Kprobes and Kretprobes enabled, the
> following config options are required:
> 1. CONFIG_HAVE_KPROBES=y
> 2. CONFIG_KPROBES=y
> 3. CONFIG_RETHOOK=y
> 4. CONFIG_KRETPROBES=y
>
> I tested the generic functionality of Kprobes and Kretprobes using the
> tests located at "lib/tests" [2], samples located at "samples/kprobes" [3],
> as well as a few test modules that I have published here [4]. The following
> options are required to build the samples and tests:
> 1. CONFIG_SAMPLES=y
> 2. CONFIG_SAMPLE_KPROBES=m
> 3. CONFIG_SAMPLE_KRETPROBES=m
> 4. CONFIG_KPROBES_SANITY_TEST=m
>
> I have also added unit tests at "arch/openrisc/kernel/tests" to verify
> that Kprobes work properly when inserted at branch instructions, and
> that delay slots are handled correctly. The tests are based on the Kprobe
> testsuite added for RISC-V. The following options need to be enabled to
> build the tests:
> 1. CONFIG_KUNIT=y
> 2. CONFIG_RUNTIME_KERNEL_TESTING_MENU=y
> 3. CONFIG_OR_KPROBES_KUNIT=m
>
> Below are the results of the tests and sample modules when run in my
> environment.
>
> - kretprobe_example:
>
> /home # insmod kretprobe_example.ko 
> Planted return probe at kernel_clone: (ptrval)
> /home # ls >/dev/null
> kernel_clone returned 35 and took 1302450 ns to execute
> /home # rmmod kretprobe_example.ko 
> kernel_clone returned 36 and took 1121200 ns to execute
> kretprobe at (ptrval) unregistered
> Missed probing 0 instances of kernel_clone
>
> - test_kprobes:
>
> /home # insmod test_kprobes.ko 
> KTAP version 1
> 1..1
>     KTAP version 1
>     # Subtest: kprobes_test
>     # module: test_kprobes
>     1..5
>     ok 1 test_kprobe
>     ok 2 test_kprobes
>     ok 3 test_kprobe_missed
>     ok 4 test_kretprobe
>     ok 5 test_kretprobes
> # kprobes_test: pass:5 fail:0 skip:0 total:5
> # Totals: pass:5 fail:0 skip:0 total:5
> ok 1 kprobes_test
>
> - openrisc_test_kprobes:
>
> /home # insmod openrisc_test_kprobes.ko 
> KTAP version 1
> 1..1
>     KTAP version 1
>     # Subtest: kprobes_openrisc
>     # module: openrisc_test_kprobes
>     1..1
>     ok 1 test_kprobe_openrisc
> ok 1 kprobes_openrisc
>
> I have also made changes based on the review comments I received for
> v1 [5] including several of Sachiko's comments [6]. I chose not to make
> changes in a few places. I'll send emails as a reply to this thread
> explaining my reasoning inline.
>
> Thanks,
> Sahil
>
> [1] https://lkml.rescloud.iu.edu/2203.0/05974.html
> [2] https://github.com/torvalds/linux/tree/master/lib/tests
> [3] https://github.com/torvalds/linux/tree/master/samples/kprobes
> [4] https://github.com/valdaarhun/or-dev
> [5] https://lwn.net/ml/all/[email protected]/
> [6] 
> https://sashiko.dev/#/patchset/20260407185650.79816-1-sahilcdq0%40gmail.com
>
> Sahil Siddiq (4):
>   openrisc: Add utilities and clean up simulation of instructions
>   openrisc: Add KProbes
>   openrisc: Add unit tests for KProbes on branch instructions
>   openrisc: Add Kretprobes
>
>  arch/openrisc/Kconfig                         |   3 +
>  arch/openrisc/Kconfig.debug                   |  30 +-
>  arch/openrisc/configs/or1ksim_defconfig       |   2 +
>  arch/openrisc/configs/virt_defconfig          |   2 +
>  arch/openrisc/include/asm/asm.h               |  22 +
>  arch/openrisc/include/asm/break.h             |  19 +
>  arch/openrisc/include/asm/cpuinfo.h           |   3 +
>  arch/openrisc/include/asm/insn-def.h          |  64 ++-
>  arch/openrisc/include/asm/kprobes.h           |  77 ++++
>  arch/openrisc/include/asm/spr_defs.h          |   1 +
>  arch/openrisc/kernel/Makefile                 |   5 +-
>  arch/openrisc/kernel/entry.S                  |  16 +
>  arch/openrisc/kernel/insn.c                   |  84 ++++
>  arch/openrisc/kernel/kprobes.c                | 400 ++++++++++++++++++
>  arch/openrisc/kernel/rethook.c                |  32 ++
>  arch/openrisc/kernel/rethook.h                |   8 +
>  arch/openrisc/kernel/rethook_trampoline.S     |  97 +++++
>  arch/openrisc/kernel/setup.c                  |   4 +
>  arch/openrisc/kernel/tests/Makefile           |   3 +
>  arch/openrisc/kernel/tests/test_kprobes.c     |  59 +++
>  arch/openrisc/kernel/tests/test_kprobes.h     |  24 ++
>  arch/openrisc/kernel/tests/test_kprobes_asm.S | 147 +++++++
>  arch/openrisc/kernel/traps.c                  |  82 ++--
>  arch/openrisc/lib/memcpy.c                    |   2 +
>  arch/openrisc/lib/memset.S                    |   4 +
>  arch/openrisc/mm/fault.c                      |   5 +
>  samples/kprobes/kprobe_example.c              |   8 +
>  27 files changed, 1152 insertions(+), 51 deletions(-)
>  create mode 100644 arch/openrisc/include/asm/asm.h
>  create mode 100644 arch/openrisc/include/asm/break.h
>  create mode 100644 arch/openrisc/include/asm/kprobes.h
>  create mode 100644 arch/openrisc/kernel/insn.c
>  create mode 100644 arch/openrisc/kernel/kprobes.c
>  create mode 100644 arch/openrisc/kernel/rethook.c
>  create mode 100644 arch/openrisc/kernel/rethook.h
>  create mode 100644 arch/openrisc/kernel/rethook_trampoline.S
>  create mode 100644 arch/openrisc/kernel/tests/Makefile
>  create mode 100644 arch/openrisc/kernel/tests/test_kprobes.c
>  create mode 100644 arch/openrisc/kernel/tests/test_kprobes.h
>  create mode 100644 arch/openrisc/kernel/tests/test_kprobes_asm.S
>
> -- 
> 2.55.0
>

-- 
Masami Hiramatsu (Google) <[email protected]>

Reply via email to