Message ID | 20240331092405.822571-3-pulehui@huaweicloud.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add 12-argument support for RV64 bpf trampoline | expand |
On 3/31/24 11:24 AM, Pu Lehui wrote: > From: Pu Lehui <pulehui@huawei.com> > > Add testcase where 7th argument is struct for architectures with 8 > argument registers, and increase the complexity of the struct. > > Signed-off-by: Pu Lehui <pulehui@huawei.com> > --- > .../selftests/bpf/bpf_testmod/bpf_testmod.c | 19 ++++++++++ > .../selftests/bpf/prog_tests/tracing_struct.c | 13 +++++++ > .../selftests/bpf/progs/tracing_struct.c | 35 +++++++++++++++++++ > 3 files changed, 67 insertions(+) The last test from this patch fails BPF CI, ptal : https://github.com/kernel-patches/bpf/actions/runs/8497262674/job/23275690303 https://github.com/kernel-patches/bpf/actions/runs/8497262674/job/23275690364 Notice: Success: 519/3592, Skipped: 53, Failed: 1 Error: #391 tracing_struct Error: #391 tracing_struct test_fentry:PASS:tracing_struct__open_and_load 0 nsec libbpf: prog 'test_struct_arg_16': failed to attach: ERROR: strerror_r(-524)=22 libbpf: prog 'test_struct_arg_16': failed to auto-attach: -524 test_fentry:FAIL:tracing_struct__attach unexpected error: -524 (errno 524) Test Results: bpftool: PASS test_progs: FAIL (returned 1) Error: Process completed with exit code 1.
On 2024/4/2 22:02, Daniel Borkmann wrote: > On 3/31/24 11:24 AM, Pu Lehui wrote: >> From: Pu Lehui <pulehui@huawei.com> >> >> Add testcase where 7th argument is struct for architectures with 8 >> argument registers, and increase the complexity of the struct. >> >> Signed-off-by: Pu Lehui <pulehui@huawei.com> >> --- >> .../selftests/bpf/bpf_testmod/bpf_testmod.c | 19 ++++++++++ >> .../selftests/bpf/prog_tests/tracing_struct.c | 13 +++++++ >> .../selftests/bpf/progs/tracing_struct.c | 35 +++++++++++++++++++ >> 3 files changed, 67 insertions(+) > > The last test from this patch fails BPF CI, ptal : > > https://github.com/kernel-patches/bpf/actions/runs/8497262674/job/23275690303 > https://github.com/kernel-patches/bpf/actions/runs/8497262674/job/23275690364 > > Notice: Success: 519/3592, Skipped: 53, Failed: 1 > Error: #391 tracing_struct > Error: #391 tracing_struct > test_fentry:PASS:tracing_struct__open_and_load 0 nsec > libbpf: prog 'test_struct_arg_16': failed to attach: ERROR: > strerror_r(-524)=22 > libbpf: prog 'test_struct_arg_16': failed to auto-attach: -524 > test_fentry:FAIL:tracing_struct__attach unexpected error: -524 (errno > 524) > Test Results: > bpftool: PASS > test_progs: FAIL (returned 1) > Error: Process completed with exit code 1. Thanks for your reminder. aarch64 does not yet support bpf trampoline with more than 8 parameters. I will add tracing_struct to DENYLIST.aarch64.
diff --git a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c b/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c index 39ad96a18123..4973d9de10af 100644 --- a/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c +++ b/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c @@ -41,6 +41,13 @@ struct bpf_testmod_struct_arg_4 { int b; }; +struct bpf_testmod_struct_arg_5 { + char a; + short b; + int c; + long d; +}; + __bpf_hook_start(); noinline int @@ -98,6 +105,15 @@ bpf_testmod_test_struct_arg_8(u64 a, void *b, short c, int d, void *e, return bpf_testmod_test_struct_arg_result; } +noinline int +bpf_testmod_test_struct_arg_9(u64 a, void *b, short c, int d, void *e, char f, + short g, struct bpf_testmod_struct_arg_5 h, long i) +{ + bpf_testmod_test_struct_arg_result = a + (long)b + c + d + (long)e + + f + g + h.a + h.b + h.c + h.d + i; + return bpf_testmod_test_struct_arg_result; +} + noinline int bpf_testmod_test_arg_ptr_to_struct(struct bpf_testmod_struct_arg_1 *a) { bpf_testmod_test_struct_arg_result = a->a; @@ -254,6 +270,7 @@ bpf_testmod_test_read(struct file *file, struct kobject *kobj, struct bpf_testmod_struct_arg_2 struct_arg2 = {2, 3}; struct bpf_testmod_struct_arg_3 *struct_arg3; struct bpf_testmod_struct_arg_4 struct_arg4 = {21, 22}; + struct bpf_testmod_struct_arg_5 struct_arg5 = {23, 24, 25, 26}; int i = 1; while (bpf_testmod_return_ptr(i)) @@ -268,6 +285,8 @@ bpf_testmod_test_read(struct file *file, struct kobject *kobj, (void *)20, struct_arg4); (void)bpf_testmod_test_struct_arg_8(16, (void *)17, 18, 19, (void *)20, struct_arg4, 23); + (void)bpf_testmod_test_struct_arg_9(16, (void *)17, 18, 19, (void *)20, + 21, 22, struct_arg5, 27); (void)bpf_testmod_test_arg_ptr_to_struct(&struct_arg1_2); diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_struct.c b/tools/testing/selftests/bpf/prog_tests/tracing_struct.c index fe0fb0c9849a..5a8eeb07a6ba 100644 --- a/tools/testing/selftests/bpf/prog_tests/tracing_struct.c +++ b/tools/testing/selftests/bpf/prog_tests/tracing_struct.c @@ -74,6 +74,19 @@ static void test_fentry(void) ASSERT_EQ(skel->bss->t8_g, 23, "t8:g"); ASSERT_EQ(skel->bss->t8_ret, 156, "t8 ret"); + ASSERT_EQ(skel->bss->t9_a, 16, "t9:a"); + ASSERT_EQ(skel->bss->t9_b, 17, "t9:b"); + ASSERT_EQ(skel->bss->t9_c, 18, "t9:c"); + ASSERT_EQ(skel->bss->t9_d, 19, "t9:d"); + ASSERT_EQ(skel->bss->t9_e, 20, "t9:e"); + ASSERT_EQ(skel->bss->t9_f, 21, "t9:f"); + ASSERT_EQ(skel->bss->t9_g, 22, "t9:f"); + ASSERT_EQ(skel->bss->t9_h_a, 23, "t9:h.a"); + ASSERT_EQ(skel->bss->t9_h_b, 24, "t9:h.b"); + ASSERT_EQ(skel->bss->t9_h_c, 25, "t9:h.c"); + ASSERT_EQ(skel->bss->t9_h_d, 26, "t9:h.d"); + ASSERT_EQ(skel->bss->t9_i, 27, "t9:i"); + ASSERT_EQ(skel->bss->t9_ret, 258, "t9 ret"); tracing_struct__detach(skel); destroy_skel: tracing_struct__destroy(skel); diff --git a/tools/testing/selftests/bpf/progs/tracing_struct.c b/tools/testing/selftests/bpf/progs/tracing_struct.c index 515daef3c84b..bfe96bab94c0 100644 --- a/tools/testing/selftests/bpf/progs/tracing_struct.c +++ b/tools/testing/selftests/bpf/progs/tracing_struct.c @@ -23,6 +23,13 @@ struct bpf_testmod_struct_arg_4 { int b; }; +struct bpf_testmod_struct_arg_5 { + char a; + short b; + int c; + long d; +}; + long t1_a_a, t1_a_b, t1_b, t1_c, t1_ret, t1_nregs; __u64 t1_reg0, t1_reg1, t1_reg2, t1_reg3; long t2_a, t2_b_a, t2_b_b, t2_c, t2_ret; @@ -32,6 +39,7 @@ long t5_ret; int t6; long t7_a, t7_b, t7_c, t7_d, t7_e, t7_f_a, t7_f_b, t7_ret; long t8_a, t8_b, t8_c, t8_d, t8_e, t8_f_a, t8_f_b, t8_g, t8_ret; +long t9_a, t9_b, t9_c, t9_d, t9_e, t9_f, t9_g, t9_h_a, t9_h_b, t9_h_c, t9_h_d, t9_i, t9_ret; SEC("fentry/bpf_testmod_test_struct_arg_1") @@ -184,4 +192,31 @@ int BPF_PROG2(test_struct_arg_15, __u64, a, void *, b, short, c, int, d, return 0; } +SEC("fentry/bpf_testmod_test_struct_arg_9") +int BPF_PROG2(test_struct_arg_16, __u64, a, void *, b, short, c, int, d, void *, e, + char, f, short, g, struct bpf_testmod_struct_arg_5, h, long, i) +{ + t9_a = a; + t9_b = (long)b; + t9_c = c; + t9_d = d; + t9_e = (long)e; + t9_f = f; + t9_g = g; + t9_h_a = h.a; + t9_h_b = h.b; + t9_h_c = h.c; + t9_h_d = h.d; + t9_i = i; + return 0; +} + +SEC("fexit/bpf_testmod_test_struct_arg_9") +int BPF_PROG2(test_struct_arg_17, __u64, a, void *, b, short, c, int, d, void *, e, + char, f, short, g, struct bpf_testmod_struct_arg_5, h, long, i, int, ret) +{ + t9_ret = ret; + return 0; +} + char _license[] SEC("license") = "GPL";