Re: [PATCH bpf-next v2 1/3] selftests/bpf: Refactor the failed assertion to another subtest

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 6/16/25 1:33 AM, Jiri Olsa wrote:
On Sun, Jun 15, 2025 at 11:53:51AM -0700, Yonghong Song wrote:

SNIP

There are total 301 locations for usdt_300. For gcc11 built binary, there are
300 spec's. But for clang20 built binary, there are 3 spec's. The libbpf default
BPF_USDT_MAX_SPEC_CNT is 256. So for gcc11, the above bpf_program__attach_usdt() will
fail, but the function will succeed for clang20.

Note that we cannot just change BPF_USDT_MAX_SPEC_CNT from 256 to 2 (through overwriting
BPF_USDT_MAX_SPEC_CNT before usdt.bpf.h) since it will cause other test failures.
We cannot just set BPF_USDT_MAX_SPEC_CNT to 2 for test_usdt_multispec.c since we
have below in the Makefile:
   test_usdt.skel.h-deps := test_usdt.bpf.o test_usdt_multispec.bpf.o
and the linker will enforce that BPF_USDT_MAX_SPEC_CNT values for both progs must
be the same.

The refactoring does not change existing test result. But the future change will
allow to set BPF_USDT_MAX_SPEC_CNT to be 2 for arm64/clang20 case, which will have
the same attachment failure as in gcc11.

Signed-off-by: Yonghong Song <yonghong.song@xxxxxxxxx>
---
  tools/testing/selftests/bpf/prog_tests/usdt.c | 35 +++++++++++++------
  1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/tools/testing/selftests/bpf/prog_tests/usdt.c b/tools/testing/selftests/bpf/prog_tests/usdt.c
index 495d66414b57..dc29ef94312a 100644
--- a/tools/testing/selftests/bpf/prog_tests/usdt.c
+++ b/tools/testing/selftests/bpf/prog_tests/usdt.c
@@ -270,18 +270,8 @@ static void subtest_multispec_usdt(void)
  	 */
  	trigger_300_usdts();
should above line (plus the comment) ...

- /* we'll reuse usdt_100 BPF program for usdt_300 test */
  	bpf_link__destroy(skel->links.usdt_100);
-	skel->links.usdt_100 = bpf_program__attach_usdt(skel->progs.usdt_100, -1, "/proc/self/exe",
-							"test", "usdt_300", NULL);
-	err = -errno;
-	if (!ASSERT_ERR_PTR(skel->links.usdt_100, "usdt_300_bad_attach"))
-		goto cleanup;
-	ASSERT_EQ(err, -E2BIG, "usdt_300_attach_err");
- /* let's check that there are no "dangling" BPF programs attached due
-	 * to partial success of the above test:usdt_300 attachment
-	 */
... and the code below (up to usdt_301_sum assert)
go to the new subtest_multispec_fail_usdt test as well?

Indeed, I need to move more codes related to usdt test/usdt_300 to
subtest_multispec_fail_usdt().

The following code
	skel->bss->usdt_100_called = 0;
	skel->bss->usdt_100_sum = 0;

should remain in function subtest_multispec_usdt() as it is needed
for test/usdt_400 usdt testing which also used usdt_100 prog.


jirka

  	bss->usdt_100_called = 0;
  	bss->usdt_100_sum = 0;
@@ -312,6 +302,29 @@ static void subtest_multispec_usdt(void)
  	test_usdt__destroy(skel);
  }
+static void subtest_multispec_fail_usdt(void)
+{
+	LIBBPF_OPTS(bpf_usdt_opts, opts);
+	struct test_usdt *skel;
+	int err;
+
+	skel = test_usdt__open_and_load();
+	if (!ASSERT_OK_PTR(skel, "skel_open"))
+		return;
+
+	skel->bss->my_pid = getpid();
+
+	skel->links.usdt_100 = bpf_program__attach_usdt(skel->progs.usdt_100, -1, "/proc/self/exe",
+							"test", "usdt_300", NULL);
+	err = -errno;
+	if (!ASSERT_ERR_PTR(skel->links.usdt_100, "usdt_300_bad_attach"))
+		goto cleanup;
+	ASSERT_EQ(err, -E2BIG, "usdt_300_attach_err");
+
+cleanup:
+	test_usdt__destroy(skel);
+}
+

[...]





[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux