From: Pu Lehui <pulehui@huawei.com>
To: "Feng Jiang" <jiangfeng@kylinos.cn>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Kumar Kartikeya Dwivedi" <memxor@gmail.com>,
"Martin KaFai Lau" <martin.lau@linux.dev>,
"Song Liu" <song@kernel.org>,
"Yonghong Song" <yonghong.song@linux.dev>,
"Jiri Olsa" <jolsa@kernel.org>,
"Emil Tsalapatis" <emil@etsalapatis.com>,
"Luke Nelson" <luke.r.nels@gmail.com>,
"Xi Wang" <xi.wang@gmail.com>, "Björn Töpel" <bjorn@kernel.org>,
"Puranjay Mohan" <puranjay@kernel.org>,
"Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Shuah Khan" <shuah@kernel.org>,
"Ihor Solodrai" <ihor.solodrai@linux.dev>
Cc: <bpf@vger.kernel.org>, <linux-riscv@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH bpf-next v5 2/3] selftests/bpf: test timed may_goto preserves R0-R5
Date: Thu, 23 Jul 2026 18:10:35 +0800 [thread overview]
Message-ID: <f8768480-9cbb-4807-bd9c-e2eeea6cdbe0@huawei.com> (raw)
In-Reply-To: <20260723-riscv-bpf-timed-may-goto-v5-2-86acb54e5642@kylinos.cn>
On 2026/7/23 13:41, Feng Jiang wrote:
> Add a test that checks R0-R5 are preserved across
> arch_bpf_timed_may_goto() calls.
>
> Use bpf_get_prandom_u32() to avoid the verifier removing the checks
> via DCE.
>
> Suggested-by: Björn Töpel <bjorn@kernel.org>
> Signed-off-by: Feng Jiang <jiangfeng@kylinos.cn>
> ---
> .../selftests/bpf/progs/verifier_may_goto_1.c | 58 ++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
Reviewed-by: Pu Lehui <pulehui@huawei.com>
>
> diff --git a/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c b/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> index 4bdf4256a41e..cb1ce4d13cfc 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> @@ -106,4 +106,62 @@ __naked void may_goto_batch_2(void)
> : __clobber_all);
> }
>
> +/*
> + * Use bpf_get_prandom_u32() to prevent DCE from removing the checks.
> + * retval: 0=all ok, 1-6=R0-R5 clobbered.
> + */
> +SEC("syscall")
> +__description("timed may_goto preserves R0-R5")
> +__arch_x86_64
> +__arch_s390x
> +__arch_arm64
> +__arch_riscv64
> +__success
> +__retval(0)
> +__naked void timed_may_goto_preserves_regs(void)
> +{
> + asm volatile (
> + "call %[bpf_get_prandom_u32];"
> + "r6 = r0;"
> + "r0 = 0x1111;"
> + "r0 += r6;"
> + "r1 = 0x2222;"
> + "r1 += r6;"
> + "r2 = 0x3333;"
> + "r2 += r6;"
> + "r3 = 0x4444;"
> + "r3 += r6;"
> + "r4 = 0x5555;"
> + "r4 += r6;"
> + "r5 = 0x6666;"
> + "r5 += r6;"
> + ".8byte %[may_goto];"
> + ".8byte %[loop];"
> + "r0 -= r6;"
> + "r1 -= r6;"
> + "r2 -= r6;"
> + "r3 -= r6;"
> + "r4 -= r6;"
> + "r5 -= r6;"
> + "if r0 != 0x1111 goto 1f;"
> + "if r1 != 0x2222 goto 2f;"
> + "if r2 != 0x3333 goto 3f;"
> + "if r3 != 0x4444 goto 4f;"
> + "if r4 != 0x5555 goto 5f;"
> + "if r5 != 0x6666 goto 6f;"
> + "r0 = 0;"
> + "exit;"
> + "1: r0 = 1; exit;"
> + "2: r0 = 2; exit;"
> + "3: r0 = 3; exit;"
> + "4: r0 = 4; exit;"
> + "5: r0 = 5; exit;"
> + "6: r0 = 6; exit;"
> + :
> + : __imm(bpf_get_prandom_u32),
> + __imm_insn(may_goto, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 1, 0)),
> + __imm_insn(loop, BPF_RAW_INSN(BPF_JMP | BPF_JA, 0, 0, -2, 0))
> + : __clobber_all);
> +}
> +
> char _license[] SEC("license") = "GPL";
>
WARNING: multiple messages have this Message-ID (diff)
From: Pu Lehui <pulehui@huawei.com>
To: "Feng Jiang" <jiangfeng@kylinos.cn>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Kumar Kartikeya Dwivedi" <memxor@gmail.com>,
"Martin KaFai Lau" <martin.lau@linux.dev>,
"Song Liu" <song@kernel.org>,
"Yonghong Song" <yonghong.song@linux.dev>,
"Jiri Olsa" <jolsa@kernel.org>,
"Emil Tsalapatis" <emil@etsalapatis.com>,
"Luke Nelson" <luke.r.nels@gmail.com>,
"Xi Wang" <xi.wang@gmail.com>, "Björn Töpel" <bjorn@kernel.org>,
"Puranjay Mohan" <puranjay@kernel.org>,
"Paul Walmsley" <pjw@kernel.org>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Shuah Khan" <shuah@kernel.org>,
"Ihor Solodrai" <ihor.solodrai@linux.dev>
Cc: <bpf@vger.kernel.org>, <linux-riscv@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-kselftest@vger.kernel.org>
Subject: Re: [PATCH bpf-next v5 2/3] selftests/bpf: test timed may_goto preserves R0-R5
Date: Thu, 23 Jul 2026 18:10:35 +0800 [thread overview]
Message-ID: <f8768480-9cbb-4807-bd9c-e2eeea6cdbe0@huawei.com> (raw)
In-Reply-To: <20260723-riscv-bpf-timed-may-goto-v5-2-86acb54e5642@kylinos.cn>
On 2026/7/23 13:41, Feng Jiang wrote:
> Add a test that checks R0-R5 are preserved across
> arch_bpf_timed_may_goto() calls.
>
> Use bpf_get_prandom_u32() to avoid the verifier removing the checks
> via DCE.
>
> Suggested-by: Björn Töpel <bjorn@kernel.org>
> Signed-off-by: Feng Jiang <jiangfeng@kylinos.cn>
> ---
> .../selftests/bpf/progs/verifier_may_goto_1.c | 58 ++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
Reviewed-by: Pu Lehui <pulehui@huawei.com>
>
> diff --git a/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c b/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> index 4bdf4256a41e..cb1ce4d13cfc 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> @@ -106,4 +106,62 @@ __naked void may_goto_batch_2(void)
> : __clobber_all);
> }
>
> +/*
> + * Use bpf_get_prandom_u32() to prevent DCE from removing the checks.
> + * retval: 0=all ok, 1-6=R0-R5 clobbered.
> + */
> +SEC("syscall")
> +__description("timed may_goto preserves R0-R5")
> +__arch_x86_64
> +__arch_s390x
> +__arch_arm64
> +__arch_riscv64
> +__success
> +__retval(0)
> +__naked void timed_may_goto_preserves_regs(void)
> +{
> + asm volatile (
> + "call %[bpf_get_prandom_u32];"
> + "r6 = r0;"
> + "r0 = 0x1111;"
> + "r0 += r6;"
> + "r1 = 0x2222;"
> + "r1 += r6;"
> + "r2 = 0x3333;"
> + "r2 += r6;"
> + "r3 = 0x4444;"
> + "r3 += r6;"
> + "r4 = 0x5555;"
> + "r4 += r6;"
> + "r5 = 0x6666;"
> + "r5 += r6;"
> + ".8byte %[may_goto];"
> + ".8byte %[loop];"
> + "r0 -= r6;"
> + "r1 -= r6;"
> + "r2 -= r6;"
> + "r3 -= r6;"
> + "r4 -= r6;"
> + "r5 -= r6;"
> + "if r0 != 0x1111 goto 1f;"
> + "if r1 != 0x2222 goto 2f;"
> + "if r2 != 0x3333 goto 3f;"
> + "if r3 != 0x4444 goto 4f;"
> + "if r4 != 0x5555 goto 5f;"
> + "if r5 != 0x6666 goto 6f;"
> + "r0 = 0;"
> + "exit;"
> + "1: r0 = 1; exit;"
> + "2: r0 = 2; exit;"
> + "3: r0 = 3; exit;"
> + "4: r0 = 4; exit;"
> + "5: r0 = 5; exit;"
> + "6: r0 = 6; exit;"
> + :
> + : __imm(bpf_get_prandom_u32),
> + __imm_insn(may_goto, BPF_RAW_INSN(BPF_JMP | BPF_JCOND, 0, 0, 1, 0)),
> + __imm_insn(loop, BPF_RAW_INSN(BPF_JMP | BPF_JA, 0, 0, -2, 0))
> + : __clobber_all);
> +}
> +
> char _license[] SEC("license") = "GPL";
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2026-07-23 10:10 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 5:41 [PATCH bpf-next v5 0/3] bpf, riscv: add timed may_goto support Feng Jiang
2026-07-23 5:41 ` Feng Jiang
2026-07-23 5:41 ` [PATCH bpf-next v5 1/3] bpf, riscv: add support for timed may_goto Feng Jiang
2026-07-23 5:41 ` Feng Jiang
2026-07-23 10:10 ` Pu Lehui
2026-07-23 10:10 ` Pu Lehui
2026-07-23 5:41 ` [PATCH bpf-next v5 2/3] selftests/bpf: test timed may_goto preserves R0-R5 Feng Jiang
2026-07-23 5:41 ` Feng Jiang
2026-07-23 10:10 ` Pu Lehui [this message]
2026-07-23 10:10 ` Pu Lehui
2026-07-23 5:41 ` [PATCH bpf-next v5 3/3] selftests/bpf: enable timed may_goto tests for riscv64 Feng Jiang
2026-07-23 5:41 ` Feng Jiang
2026-07-23 10:15 ` Pu Lehui
2026-07-23 10:15 ` Pu Lehui
2026-07-24 19:51 ` Björn Töpel
2026-07-24 19:51 ` Björn Töpel
2026-07-23 10:16 ` [PATCH bpf-next v5 0/3] bpf, riscv: add timed may_goto support Pu Lehui
2026-07-23 10:16 ` Pu Lehui
2026-07-24 19:52 ` Björn Töpel
2026-07-24 19:52 ` Björn Töpel
2026-07-24 20:40 ` patchwork-bot+netdevbpf
2026-07-24 20:40 ` patchwork-bot+netdevbpf
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=f8768480-9cbb-4807-bd9c-e2eeea6cdbe0@huawei.com \
--to=pulehui@huawei.com \
--cc=alex@ghiti.fr \
--cc=andrii@kernel.org \
--cc=aou@eecs.berkeley.edu \
--cc=ast@kernel.org \
--cc=bjorn@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=emil@etsalapatis.com \
--cc=ihor.solodrai@linux.dev \
--cc=jiangfeng@kylinos.cn \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=luke.r.nels@gmail.com \
--cc=martin.lau@linux.dev \
--cc=memxor@gmail.com \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=puranjay@kernel.org \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=xi.wang@gmail.com \
--cc=yonghong.song@linux.dev \
/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.