tools/testing/selftests/bpf/progs/verifier_jit_inline.c | 2 ++ 1 file changed, 2 insertions(+)
Add the JITed inline instruction of bpf_get_smp_processor_id() for RISC-V
to pass the test case.
On RISC-V, the 'cpu' field of 'struct thread_info' resides at offset 0x20,
BPF_REG_0 maps to the a5 register, and the thread pointer (tp) is used as
the base address. Therefore, the JIT compiler emits "lw a5, 0x20(tp)" to
optimize this helper call.
Tested on a RISC-V virtual machine.
Before:
$ sudo ./test_progs -t verifier_jit_inline
#610/1 verifier_jit_inline/inline_bpf_get_current_task:OK
#610/2 verifier_jit_inline/inline_bpf_get_smp_processor_id:SKIP
#610 verifier_jit_inline:OK (SKIP: 1/2)
Summary: 1/1 PASSED, 1 SKIPPED, 0 FAILED
After:
$ sudo ./test_progs -t verifier_jit_inline
#610/1 verifier_jit_inline/inline_bpf_get_current_task:OK
#610/2 verifier_jit_inline/inline_bpf_get_smp_processor_id:OK
#610 verifier_jit_inline:OK
Summary: 1/2 PASSED, 0 SKIPPED, 0 FAILED
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
---
tools/testing/selftests/bpf/progs/verifier_jit_inline.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
index 02e562f56f9d..c696baa5364b 100644
--- a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
+++ b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
@@ -25,6 +25,8 @@ SEC("fentry/bpf_fentry_test2")
__success __retval(0)
__arch_loongarch
__jited(" ld.wu $a5, $tp, 16")
+__arch_riscv64
+__jited(" lw a5, 0x20(tp)")
int inline_bpf_get_smp_processor_id(void)
{
bpf_get_smp_processor_id();
--
2.42.0
On 2026/7/22 15:01, Tiezhu Yang wrote:
> Add the JITed inline instruction of bpf_get_smp_processor_id() for RISC-V
> to pass the test case.
>
> On RISC-V, the 'cpu' field of 'struct thread_info' resides at offset 0x20,
> BPF_REG_0 maps to the a5 register, and the thread pointer (tp) is used as
> the base address. Therefore, the JIT compiler emits "lw a5, 0x20(tp)" to
> optimize this helper call.
>
> Tested on a RISC-V virtual machine.
>
> Before:
> $ sudo ./test_progs -t verifier_jit_inline
> #610/1 verifier_jit_inline/inline_bpf_get_current_task:OK
> #610/2 verifier_jit_inline/inline_bpf_get_smp_processor_id:SKIP
> #610 verifier_jit_inline:OK (SKIP: 1/2)
> Summary: 1/1 PASSED, 1 SKIPPED, 0 FAILED
>
> After:
> $ sudo ./test_progs -t verifier_jit_inline
> #610/1 verifier_jit_inline/inline_bpf_get_current_task:OK
> #610/2 verifier_jit_inline/inline_bpf_get_smp_processor_id:OK
> #610 verifier_jit_inline:OK
> Summary: 1/2 PASSED, 0 SKIPPED, 0 FAILED
>
> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
> ---
> tools/testing/selftests/bpf/progs/verifier_jit_inline.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> index 02e562f56f9d..c696baa5364b 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_jit_inline.c
> @@ -25,6 +25,8 @@ SEC("fentry/bpf_fentry_test2")
> __success __retval(0)
> __arch_loongarch
> __jited(" ld.wu $a5, $tp, 16")
> +__arch_riscv64
> +__jited(" lw a5, 0x20(tp)")
> int inline_bpf_get_smp_processor_id(void)
> {
> bpf_get_smp_processor_id();
Hi Tiezhu,
There are many places in selftest can be add __arch_riscv64 tag, I think
we can enable them witch one patch.
© 2016 - 2026 Red Hat, Inc.