mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch
@ 2026-08-13  7:09 Tiezhu Yang
  2026-08-13  8:11 ` bot+bpf-ci
  2026-08-17  9:20 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 4+ messages in thread
From: Tiezhu Yang @ 2026-08-13  7:09 UTC (permalink / raw)
  To: Huacai Chen, Hengqi Chen, Alexei Starovoitov, Daniel Borkmann,
	Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi
  Cc: loongarch, bpf, linux-kernel

Enable stream_cond_break, may_goto_interaction, and verifier_may_goto_1
tests for LoongArch, aligning with recent architectural infrastructure
support (timed may_goto and arch_bpf_stack_walk JIT).

With this patch, the following tests passed on LoongArch:

  sudo ./test_progs -a stream_success/stream_cond_break
  sudo ./test_progs -a verifier_bpf_fastcall/may_goto_interaction
  sudo ./test_progs -a verifier_may_goto_1

Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
---
This patch is based on the latest bpf-next tree, it depends on the
following two patches:

LoongArch: BPF: Add timed may_goto support
https://lore.kernel.org/loongarch/20260804153938.16129-3-dongtai.guo@linux.dev/

LoongArch: BPF: Implement arch_bpf_stack_walk()
https://lore.kernel.org/loongarch/20260813045306.21571-1-yangtiezhu@loongson.cn/

They are expected to be merged into v7.3-rc1 during the upcoming merge
window through the loongarch-next tree.

 tools/testing/selftests/bpf/progs/stream.c                | 1 +
 tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c | 1 +
 tools/testing/selftests/bpf/progs/verifier_may_goto_1.c   | 5 +++++
 3 files changed, 7 insertions(+)

diff --git a/tools/testing/selftests/bpf/progs/stream.c b/tools/testing/selftests/bpf/progs/stream.c
index 00a37933e411..8e8e1339dc74 100644
--- a/tools/testing/selftests/bpf/progs/stream.c
+++ b/tools/testing/selftests/bpf/progs/stream.c
@@ -65,6 +65,7 @@ __arch_x86_64
 __arch_arm64
 __arch_s390x
 __arch_riscv64
+__arch_loongarch
 __success __retval(0)
 __stderr("ERROR: Timeout detected for may_goto instruction")
 __stderr("CPU: {{[0-9]+}} UID: 0 PID: {{[0-9]+}} Comm: {{.*}}")
diff --git a/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c b/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c
index 4cfaa6b4ab40..328cf630210a 100644
--- a/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c
+++ b/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c
@@ -665,6 +665,7 @@ __naked void may_goto_interaction_x86_64(void)
 SEC("raw_tp")
 __arch_arm64
 __arch_riscv64
+__arch_loongarch
 __log_level(4)
 __msg("subprog 0 (may_goto_interaction) main {{.*}} stack 24")
 /* may_goto counter at -24 */
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 0e211f030d0d..db7e30da234f 100644
--- a/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
+++ b/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
@@ -12,6 +12,7 @@ __arch_x86_64
 __arch_s390x
 __arch_arm64
 __arch_riscv64
+__arch_loongarch
 __xlated("0: r0 = 1")
 __xlated("1: exit")
 __success
@@ -33,6 +34,7 @@ __arch_x86_64
 __arch_s390x
 __arch_arm64
 __arch_riscv64
+__arch_loongarch
 __xlated("0: r0 = 1")
 __xlated("1: exit")
 __success
@@ -56,6 +58,7 @@ __arch_x86_64
 __arch_s390x
 __arch_arm64
 __arch_riscv64
+__arch_loongarch
 __xlated("0: r0 = 1")
 __xlated("1: exit")
 __success
@@ -83,6 +86,7 @@ __arch_x86_64
 __arch_s390x
 __arch_arm64
 __arch_riscv64
+__arch_loongarch
 __xlated("0: *(u64 *)(r10 -16) = 65535")
 __xlated("1: *(u64 *)(r10 -8) = 0")
 __xlated("2: r12 = *(u64 *)(r10 -16)")
@@ -120,6 +124,7 @@ __arch_x86_64
 __arch_s390x
 __arch_arm64
 __arch_riscv64
+__arch_loongarch
 __success
 __retval(0)
 __naked void timed_may_goto_preserves_regs(void)
-- 
2.42.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch
  2026-08-13  7:09 [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch Tiezhu Yang
@ 2026-08-13  8:11 ` bot+bpf-ci
  2026-08-13  8:24   ` Tiezhu Yang
  2026-08-17  9:20 ` patchwork-bot+netdevbpf
  1 sibling, 1 reply; 4+ messages in thread
From: bot+bpf-ci @ 2026-08-13  8:11 UTC (permalink / raw)
  To: yangtiezhu, chenhuacai, hengqi.chen, ast, daniel, andrii,
	eddyz87, memxor
  Cc: loongarch, bpf, linux-kernel, ast, andrii, daniel, martin.lau,
	eddyz87, yonghong.song, clm, ihor.solodrai

[-- Attachment #1: Type: text/plain, Size: 6439 bytes --]

> selftests/bpf: Enable timed may_goto tests for LoongArch
>
> Enable stream_cond_break, may_goto_interaction, and verifier_may_goto_1
> tests for LoongArch, aligning with recent architectural infrastructure
> support (timed may_goto and arch_bpf_stack_walk JIT).

The changelog states the tests are enabled "aligning with recent
architectural infrastructure support (timed may_goto and arch_bpf_stack_walk
JIT)". Does LoongArch have this infrastructure at this commit?

Looking at the tree, bpf_jit_supports_timed_may_goto() is not implemented for
LoongArch (only the __weak false stub in kernel/bpf/core.c:3379 exists).
arch/loongarch/net/Makefile builds only bpf_jit.o -- there is no
bpf_timed_may_goto.S file, unlike arm64, riscv, s390, powerpc, and x86. Also,
arch_bpf_stack_walk() is not implemented for LoongArch (only arch_stack_walk()
exists in arch/loongarch/kernel/stacktrace.c, but not the BPF-specific
variant).

If the enabling JIT work is in a separate series or a different tree, should
the changelog name it and state the dependency? As applied, this patch makes
three previously-skipped subtests fail on LoongArch.

> diff --git a/tools/testing/selftests/bpf/progs/stream.c b/tools/testing/selftests/bpf/progs/stream.c
> index 00a37933e411d..8e8e1339dc743 100644
> --- a/tools/testing/selftests/bpf/progs/stream.c
> +++ b/tools/testing/selftests/bpf/progs/stream.c
> @@ -65,6 +65,7 @@ __arch_x86_64
>  __arch_arm64
>  __arch_s390x
>  __arch_riscv64
> +__arch_loongarch
>  __success __retval(0)
>  __stderr("ERROR: Timeout detected for may_goto instruction")
>  __stderr("CPU: {{[0-9]+}} UID: 0 PID: {{[0-9]+}} Comm: {{.*}}")

The stream_cond_break test asserts that the kernel emits "ERROR: Timeout
detected for may_goto instruction" to stderr. Will this work on LoongArch?

The timeout message is only produced from bpf_prog_report_may_goto_violation()
in kernel/bpf/core.c:3389, which is only reached from
bpf_check_timed_may_goto(), which is only called from the verifier-emitted
sequence in kernel/bpf/fixups.c:1772 -- and that sequence is only emitted when
bpf_jit_supports_timed_may_goto() returns true.

LoongArch does not implement bpf_jit_supports_timed_may_goto():

arch/loongarch/net/bpf_jit.c defines bpf_jit_supports_{kfunc_call,
far_kfunc_call,arena,fsession,subprog_tailcalls} and
bpf_jit_inlines_helper_call(), but no bpf_jit_supports_timed_may_goto(), so
the __weak stub in kernel/bpf/core.c:3379 returning false applies.

arch/loongarch/net/Makefile also builds only bpf_jit.o -- there is no
bpf_timed_may_goto.S, unlike arm64/riscv/s390/powerpc/x86.

On LoongArch the while (can_loop) loop is expanded through the non-timed path
at fixups.c:1815, the loop simply terminates after BPF_MAX_LOOPS iterations,
nothing is written to stderr, and the three __stderr() expectations fail.

Additionally, even with timed may_goto support, bpf_prog_report_may_goto_violation()
returns early when bpf_prog_find_from_stack() returns NULL, and that function
only walks the stack via arch_bpf_stack_walk() in kernel/bpf/core.c:3587.
LoongArch has no arch_bpf_stack_walk() implementation (only arch_stack_walk()
in arch/loongarch/kernel/stacktrace.c), so the __weak no-op at
kernel/bpf/core.c:3375 applies and ctx.prog stays NULL.

> diff --git a/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c b/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c
> index 4cfaa6b4ab405..328cf630210a2 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_bpf_fastcall.c
> @@ -665,6 +665,7 @@ __naked void may_goto_interaction_x86_64(void)
>  SEC("raw_tp")
>  __arch_arm64
>  __arch_riscv64
> +__arch_loongarch
>  __log_level(4)
>  __msg("subprog 0 (may_goto_interaction) main {{.*}} stack 24")
>  /* may_goto counter at -24 */

Will this stack 24 assertion work on LoongArch?

The arch grouping is correct: this non-x86 variant expects
3: call bpf_get_smp_processor_id to survive, and
bpf_verifier_inlines_helper_call() only inlines BPF_FUNC_get_smp_processor_id
under CONFIG_X86_64 in kernel/bpf/verifier.c:16685, so LoongArch behaves like
arm64/riscv64 here.

But the rest of the assertion is specific to timed may_goto:

  - stack 24 and the two prologue stores 0: *(u64 *)(r10 -24) = and
    1: *(u64 *)(r10 -16) = come from the two-slot init at
    kernel/bpf/fixups.c:2400-2403, which is guarded by
    bpf_jit_supports_timed_may_goto().

  - The 7-insn expansion 4: r12 = *(u64 *)(r10 -24) ... 8: r12 = -24 /
    9: call unknown / 10: *(u64 *)(r10 -24) = r12 is the timed expansion at
    kernel/bpf/fixups.c:1790-1805.

On LoongArch the non-timed branch at fixups.c:1815 runs instead: a single
8-byte slot (stack 16, one prologue store of BPF_MAX_LOOPS) and a 4-insn
expansion with no call. Every __msg/__xlated line above therefore mismatches.

> 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 0e211f030d0d7..db7e30da234f1 100644
> --- a/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c
> +++ b/tools/testing/selftests/bpf/progs/verifier_may_goto_1.c

[ ... ]

> @@ -83,6 +86,7 @@ __arch_x86_64
>  __arch_s390x
>  __arch_arm64
>  __arch_riscv64
> +__arch_loongarch
>  __xlated("0: *(u64 *)(r10 -16) = 65535")
>  __xlated("1: *(u64 *)(r10 -8) = 0")
>  __xlated("2: r12 = *(u64 *)(r10 -16)")

Will the may_goto_batch_2 test assertions work on LoongArch?

This "may_goto batch with offsets 2/0" case asserts the exact timed may_goto
rewrite: two prologue slots initialised to BPF_MAX_TIMED_LOOPS (65535) and 0
in kernel/bpf/fixups.c:2400-2403, then the 7-insn expansion ending in
6: r12 = -16 / 7: call unknown / 8: *(u64 *)(r10 -16) = r12 in
kernel/bpf/fixups.c:1790-1805.

All of it is gated on bpf_jit_supports_timed_may_goto(), which LoongArch does
not implement (only the __weak false stub in kernel/bpf/core.c:3379 exists;
arch/loongarch/net/ has no bpf_timed_may_goto.S and bpf_jit.c defines no such
callback).

On LoongArch the verifier takes the non-timed branch at
kernel/bpf/fixups.c:1815 and emits *(u64 *)(r10 -8) = 8388608 followed by a
4-insn expansion with no call, so this subtest fails.


---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md

CI run summary: https://github.com/kernel-patches/bpf/actions/runs/31678043819

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch
  2026-08-13  8:11 ` bot+bpf-ci
@ 2026-08-13  8:24   ` Tiezhu Yang
  0 siblings, 0 replies; 4+ messages in thread
From: Tiezhu Yang @ 2026-08-13  8:24 UTC (permalink / raw)
  To: bot+bpf-ci, chenhuacai, hengqi.chen, ast, daniel, andrii,
	eddyz87, memxor
  Cc: loongarch, bpf, linux-kernel, martin.lau, yonghong.song, clm,
	ihor.solodrai

On 2026/8/13 下午4:11, bot+bpf-ci@kernel.org wrote:
>> selftests/bpf: Enable timed may_goto tests for LoongArch
>>
>> Enable stream_cond_break, may_goto_interaction, and verifier_may_goto_1
>> tests for LoongArch, aligning with recent architectural infrastructure
>> support (timed may_goto and arch_bpf_stack_walk JIT).
> 
> The changelog states the tests are enabled "aligning with recent
> architectural infrastructure support (timed may_goto and arch_bpf_stack_walk
> JIT)". Does LoongArch have this infrastructure at this commit?
> 
> Looking at the tree, bpf_jit_supports_timed_may_goto() is not implemented for
> LoongArch (only the __weak false stub in kernel/bpf/core.c:3379 exists).
> arch/loongarch/net/Makefile builds only bpf_jit.o -- there is no
> bpf_timed_may_goto.S file, unlike arm64, riscv, s390, powerpc, and x86. Also,
> arch_bpf_stack_walk() is not implemented for LoongArch (only arch_stack_walk()
> exists in arch/loongarch/kernel/stacktrace.c, but not the BPF-specific
> variant).
> 
> If the enabling JIT work is in a separate series or a different tree, should
> the changelog name it and state the dependency? As applied, this patch makes
> three previously-skipped subtests fail on LoongArch.

Please see the additional comments after the --- marker line:

"This patch is based on the latest bpf-next tree, it depends on the
following two patches:

LoongArch: BPF: Add timed may_goto support
https://lore.kernel.org/loongarch/20260804153938.16129-3-dongtai.guo@linux.dev/

LoongArch: BPF: Implement arch_bpf_stack_walk()
https://lore.kernel.org/loongarch/20260813045306.21571-1-yangtiezhu@loongson.cn/

They are expected to be merged into v7.3-rc1 during the upcoming merge
window through the loongarch-next tree."

Here are the test results:

Before:
$ sudo ./test_progs -a stream_success/stream_cond_break
#466/2   stream_success/stream_cond_break:SKIP
#466     stream_success:OK (SKIP: 1/14)
Summary: 1/0 PASSED, 1 SKIPPED, 0/0 FAILED
$ sudo ./test_progs -a verifier_bpf_fastcall/may_goto_interaction
#580/24  verifier_bpf_fastcall/may_goto_interaction:SKIP
#580     verifier_bpf_fastcall:OK (SKIP: 1/29)
Summary: 1/0 PASSED, 1 SKIPPED, 0/0 FAILED
$ sudo ./test_progs -a verifier_may_goto_1
#635/1   verifier_may_goto_1/may_goto 0:SKIP
#635/2   verifier_may_goto_1/batch 2 of may_goto 0:SKIP
#635/3   verifier_may_goto_1/may_goto batch with offsets 2/1/0:SKIP
#635/4   verifier_may_goto_1/may_goto batch with offsets 2/0:SKIP
#635/5   verifier_may_goto_1/timed may_goto preserves R0-R5:SKIP
#635     verifier_may_goto_1:SKIP
Summary: 1/0 PASSED, 5 SKIPPED, 0/0 FAILED

After:
$ sudo ./test_progs -a stream_success/stream_cond_break
#466/2   stream_success/stream_cond_break:OK
#466     stream_success:OK
Summary: 1/1 PASSED, 0 SKIPPED, 0/0 FAILED
$ sudo ./test_progs -a verifier_bpf_fastcall/may_goto_interaction
#580/24  verifier_bpf_fastcall/may_goto_interaction:OK
#580     verifier_bpf_fastcall:OK
Summary: 1/1 PASSED, 0 SKIPPED, 0/0 FAILED
$ sudo ./test_progs -a verifier_may_goto_1
#635/1   verifier_may_goto_1/may_goto 0:OK
#635/2   verifier_may_goto_1/batch 2 of may_goto 0:OK
#635/3   verifier_may_goto_1/may_goto batch with offsets 2/1/0:OK
#635/4   verifier_may_goto_1/may_goto batch with offsets 2/0:OK
#635/5   verifier_may_goto_1/timed may_goto preserves R0-R5:OK
#635     verifier_may_goto_1:OK
Summary: 1/5 PASSED, 0 SKIPPED, 0/0 FAILED

Thanks,
Tiezhu


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch
  2026-08-13  7:09 [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch Tiezhu Yang
  2026-08-13  8:11 ` bot+bpf-ci
@ 2026-08-17  9:20 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2026-08-17  9:20 UTC (permalink / raw)
  To: Tiezhu Yang
  Cc: chenhuacai, hengqi.chen, ast, daniel, andrii, eddyz87, memxor,
	loongarch, bpf, linux-kernel

Hello:

This patch was applied to bpf/bpf-next.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:

On Thu, 13 Aug 2026 15:09:06 +0800 you wrote:
> Enable stream_cond_break, may_goto_interaction, and verifier_may_goto_1
> tests for LoongArch, aligning with recent architectural infrastructure
> support (timed may_goto and arch_bpf_stack_walk JIT).
> 
> With this patch, the following tests passed on LoongArch:
> 
>   sudo ./test_progs -a stream_success/stream_cond_break
>   sudo ./test_progs -a verifier_bpf_fastcall/may_goto_interaction
>   sudo ./test_progs -a verifier_may_goto_1
> 
> [...]

Here is the summary with links:
  - [bpf-next,v1] selftests/bpf: Enable timed may_goto tests for LoongArch
    https://git.kernel.org/bpf/bpf-next/c/77877bf570ff

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-08-17  9:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-13  7:09 [PATCH bpf-next v1] selftests/bpf: Enable timed may_goto tests for LoongArch Tiezhu Yang
2026-08-13  8:11 ` bot+bpf-ci
2026-08-13  8:24   ` Tiezhu Yang
2026-08-17  9:20 ` patchwork-bot+netdevbpf

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®