Re: [PATCH bpf-next 2/2] selftests/bpf: Add testcases for callback with tailcall

From: Eduard Zingerman

Date: Mon Jul 13 2026 - 18:13:04 EST


On Sat, 2026-07-11 at 10:47 +0000, Pu Lehui wrote:

[...]

> diff --git a/tools/testing/selftests/bpf/prog_tests/tailcalls.c b/tools/testing/selftests/bpf/prog_tests/tailcalls.c
> index a5a226d0104c..c66037162da5 100644
> --- a/tools/testing/selftests/bpf/prog_tests/tailcalls.c
> +++ b/tools/testing/selftests/bpf/prog_tests/tailcalls.c

[...]

>  void test_tailcalls(void)
>  {
>   if (test__start_subtest("tailcall_1"))
> @@ -1967,4 +1973,5 @@ void test_tailcalls(void)
>   test_tailcall_cgrp_storage_no_storage_leaf();
>   if (test__start_subtest("tailcall_cgrp_storage_no_storage_bridge"))
>   test_tailcall_cgrp_storage_no_storage_bridge();
> + test_tailcall_callback();

Please use test__start_subtest().

>  }
> diff --git a/tools/testing/selftests/bpf/progs/tailcall_callback.c b/tools/testing/selftests/bpf/progs/tailcall_callback.c
> new file mode 100644
> index 000000000000..504d8e7a6996
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/progs/tailcall_callback.c

[...]

> +/* callback involving 1 subprog with tail call is rejected */
> +SEC("tc")
> +__failure __msg("cannot tail call within callback")
> +int tailcall_bpf2bpf_callback_1(struct __sk_buff *skb)
> +{
> + clobber_regs_stack();
> +
> + bpf_loop(1, callback_loop_2, &skb, 0);
> + return 0;
> +}

I think having all three is a bit redundant,
let's settle on tailcall_bpf2bpf_callback_1?