xref: /linux/tools/testing/selftests/bpf/prog_tests/libarena.c (revision 9f5b3ffc3f1dac7204e32eeeff84bc5cc55c393e)
1 // SPDX-License-Identifier: LGPL-2.1 OR BSD-2-Clause
2 /* Copyright (c) 2026 Meta Platforms, Inc. and affiliates. */
3 #include <test_progs.h>
4 #include <unistd.h>
5 
6 #include <libarena/common.h>
7 #include <libarena/asan.h>
8 #include <libarena/buddy.h>
9 #include <libarena/userspace.h>
10 
11 #include "libarena/libarena.skel.h"
12 
13 static void run_libarena_test(struct libarena *skel, struct bpf_program *prog,
14 		const char *name)
15 {
16 	int ret;
17 
18 	if (!strstr(name, "test_buddy")) {
19 		ret = libarena_run_prog(bpf_program__fd(skel->progs.arena_buddy_reset));
20 		if (!ASSERT_OK(ret, "arena_buddy_reset"))
21 			return;
22 	}
23 
24 	ret = libarena_run_prog(bpf_program__fd(prog));
25 
26 	ASSERT_OK(ret, name);
27 
28 }
29 
30 void test_libarena(void)
31 {
32 	struct arena_alloc_reserve_args args;
33 	struct libarena *skel;
34 	struct bpf_program *prog;
35 	int ret;
36 
37 	skel = libarena__open_and_load();
38 	if (!ASSERT_OK_PTR(skel, "open_and_load"))
39 		return;
40 
41 	ret = libarena__attach(skel);
42 	if (!ASSERT_OK(ret, "attach"))
43 		goto out;
44 
45 	args.nr_pages = ARENA_RESERVE_PAGES_DFL;
46 
47 	ret = libarena_run_prog_args(bpf_program__fd(skel->progs.arena_alloc_reserve),
48 			&args, sizeof(args));
49 	if (!ASSERT_OK(ret, "arena_alloc_reserve"))
50 		goto out;
51 
52 	bpf_object__for_each_program(prog, skel->obj) {
53 		const char *name = bpf_program__name(prog);
54 
55 		if (!libarena_is_test_prog(name))
56 			continue;
57 
58 		if (!test__start_subtest(name))
59 			continue;
60 
61 		run_libarena_test(skel, prog, name);
62 	}
63 
64 out:
65 	libarena__destroy(skel);
66 }
67