Message ID | 20240403072818.1462811-3-pulehui@huaweicloud.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add 12-argument support for RV64 bpf trampoline | expand |
On 4/3/24 9:28 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> > Acked-by: Björn Töpel <bjorn@kernel.org> > Reviewed-by: Björn Töpel <bjorn@rivosinc.com> > --- > tools/testing/selftests/bpf/DENYLIST.aarch64 | 1 + > .../selftests/bpf/bpf_testmod/bpf_testmod.c | 19 ++++++++++ > .../selftests/bpf/prog_tests/tracing_struct.c | 13 +++++++ > .../selftests/bpf/progs/tracing_struct.c | 35 +++++++++++++++++++ > 4 files changed, 68 insertions(+) > > diff --git a/tools/testing/selftests/bpf/DENYLIST.aarch64 b/tools/testing/selftests/bpf/DENYLIST.aarch64 > index d8ade15e2789..639ee3f5bc74 100644 > --- a/tools/testing/selftests/bpf/DENYLIST.aarch64 > +++ b/tools/testing/selftests/bpf/DENYLIST.aarch64 > @@ -6,6 +6,7 @@ kprobe_multi_test # needs CONFIG_FPROBE > module_attach # prog 'kprobe_multi': failed to auto-attach: -95 > fentry_test/fentry_many_args # fentry_many_args:FAIL:fentry_many_args_attach unexpected error: -524 > fexit_test/fexit_many_args # fexit_many_args:FAIL:fexit_many_args_attach unexpected error: -524 > +tracing_struct # test_fentry:FAIL:tracing_struct__attach unexpected error: -524 Do we need to blacklist the whole test given it had coverage on arm64 before.. perhaps this test here could be done as a new subtest and only that one is listed for arm64? > fill_link_info/kprobe_multi_link_info # bpf_program__attach_kprobe_multi_opts unexpected error: -95 > fill_link_info/kretprobe_multi_link_info # bpf_program__attach_kprobe_multi_opts unexpected error: -95 > fill_link_info/kprobe_multi_invalid_ubuff # bpf_program__attach_kprobe_multi_opts unexpected error: -95 Thanks, Daniel
On 2024/4/3 22:40, Daniel Borkmann wrote: > On 4/3/24 9:28 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> >> Acked-by: Björn Töpel <bjorn@kernel.org> >> Reviewed-by: Björn Töpel <bjorn@rivosinc.com> >> --- >> tools/testing/selftests/bpf/DENYLIST.aarch64 | 1 + >> .../selftests/bpf/bpf_testmod/bpf_testmod.c | 19 ++++++++++ >> .../selftests/bpf/prog_tests/tracing_struct.c | 13 +++++++ >> .../selftests/bpf/progs/tracing_struct.c | 35 +++++++++++++++++++ >> 4 files changed, 68 insertions(+) >> >> diff --git a/tools/testing/selftests/bpf/DENYLIST.aarch64 >> b/tools/testing/selftests/bpf/DENYLIST.aarch64 >> index d8ade15e2789..639ee3f5bc74 100644 >> --- a/tools/testing/selftests/bpf/DENYLIST.aarch64 >> +++ b/tools/testing/selftests/bpf/DENYLIST.aarch64 >> @@ -6,6 +6,7 @@ kprobe_multi_test # >> needs CONFIG_FPROBE >> module_attach # prog >> 'kprobe_multi': failed to auto-attach: -95 >> fentry_test/fentry_many_args # >> fentry_many_args:FAIL:fentry_many_args_attach unexpected error: -524 >> fexit_test/fexit_many_args # >> fexit_many_args:FAIL:fexit_many_args_attach unexpected error: -524 >> +tracing_struct # >> test_fentry:FAIL:tracing_struct__attach unexpected error: -524 > > Do we need to blacklist the whole test given it had coverage on arm64 > before.. perhaps this test here could be done as a new subtest and only > that one is listed for arm64? Yeah, I thought so at first, just like fexit_many_args of fentry/fexit, but I found that the things struct_tracing does are all in the same series, but the number or type of parameters are different, and the new use case I added is the same in this way. And I found that the execution logic of stract_tracing is relatively simple and clear, triggering all hook points, executing all bpf programs, and asserting all parameters. Shall we need to slice them up? > >> fill_link_info/kprobe_multi_link_info # >> bpf_program__attach_kprobe_multi_opts unexpected error: -95 >> fill_link_info/kretprobe_multi_link_info # >> bpf_program__attach_kprobe_multi_opts unexpected error: -95 >> fill_link_info/kprobe_multi_invalid_ubuff # >> bpf_program__attach_kprobe_multi_opts unexpected error: -95 > > Thanks, > Daniel
On 2024/4/3 23:50, Pu Lehui wrote: > > > On 2024/4/3 22:40, Daniel Borkmann wrote: >> On 4/3/24 9:28 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> >>> Acked-by: Björn Töpel <bjorn@kernel.org> >>> Reviewed-by: Björn Töpel <bjorn@rivosinc.com> >>> --- >>> tools/testing/selftests/bpf/DENYLIST.aarch64 | 1 + >>> .../selftests/bpf/bpf_testmod/bpf_testmod.c | 19 ++++++++++ >>> .../selftests/bpf/prog_tests/tracing_struct.c | 13 +++++++ >>> .../selftests/bpf/progs/tracing_struct.c | 35 +++++++++++++++++++ >>> 4 files changed, 68 insertions(+) >>> >>> diff --git a/tools/testing/selftests/bpf/DENYLIST.aarch64 >>> b/tools/testing/selftests/bpf/DENYLIST.aarch64 >>> index d8ade15e2789..639ee3f5bc74 100644 >>> --- a/tools/testing/selftests/bpf/DENYLIST.aarch64 >>> +++ b/tools/testing/selftests/bpf/DENYLIST.aarch64 >>> @@ -6,6 +6,7 @@ kprobe_multi_test # >>> needs CONFIG_FPROBE >>> module_attach # prog >>> 'kprobe_multi': failed to auto-attach: -95 >>> fentry_test/fentry_many_args # >>> fentry_many_args:FAIL:fentry_many_args_attach unexpected error: -524 >>> fexit_test/fexit_many_args # >>> fexit_many_args:FAIL:fexit_many_args_attach unexpected error: -524 >>> +tracing_struct # >>> test_fentry:FAIL:tracing_struct__attach unexpected error: -524 >> >> Do we need to blacklist the whole test given it had coverage on arm64 >> before.. perhaps this test here could be done as a new subtest and only >> that one is listed for arm64? > > Yeah, I thought so at first, just like fexit_many_args of fentry/fexit, > but I found that the things struct_tracing does are all in the same > series, but the number or type of parameters are different, and the new > use case I added is the same in this way. And I found that the execution > logic of stract_tracing is relatively simple and clear, triggering all > hook points, executing all bpf programs, and asserting all parameters. > Shall we need to slice them up? ping~ Daniel, shall we need to do that? > >> >>> fill_link_info/kprobe_multi_link_info # >>> bpf_program__attach_kprobe_multi_opts unexpected error: -95 >>> fill_link_info/kretprobe_multi_link_info # >>> bpf_program__attach_kprobe_multi_opts unexpected error: -95 >>> fill_link_info/kprobe_multi_invalid_ubuff # >>> bpf_program__attach_kprobe_multi_opts unexpected error: -95 >> >> Thanks, >> Daniel >
diff --git a/tools/testing/selftests/bpf/DENYLIST.aarch64 b/tools/testing/selftests/bpf/DENYLIST.aarch64 index d8ade15e2789..639ee3f5bc74 100644 --- a/tools/testing/selftests/bpf/DENYLIST.aarch64 +++ b/tools/testing/selftests/bpf/DENYLIST.aarch64 @@ -6,6 +6,7 @@ kprobe_multi_test # needs CONFIG_FPROBE module_attach # prog 'kprobe_multi': failed to auto-attach: -95 fentry_test/fentry_many_args # fentry_many_args:FAIL:fentry_many_args_attach unexpected error: -524 fexit_test/fexit_many_args # fexit_many_args:FAIL:fexit_many_args_attach unexpected error: -524 +tracing_struct # test_fentry:FAIL:tracing_struct__attach unexpected error: -524 fill_link_info/kprobe_multi_link_info # bpf_program__attach_kprobe_multi_opts unexpected error: -95 fill_link_info/kretprobe_multi_link_info # bpf_program__attach_kprobe_multi_opts unexpected error: -95 fill_link_info/kprobe_multi_invalid_ubuff # bpf_program__attach_kprobe_multi_opts unexpected error: -95 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";