1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (C) 2023. Huawei Technologies Co., Ltd */
8 #include <test_progs.h>
10 #include "test_bpf_ma.skel.h"
12 static void do_bpf_ma_test(const char *name)
14 struct test_bpf_ma *skel;
15 struct bpf_program *prog;
20 skel = test_bpf_ma__open();
21 if (!ASSERT_OK_PTR(skel, "open"))
24 btf = bpf_object__btf(skel->obj);
25 if (!ASSERT_OK_PTR(btf, "btf"))
28 for (i = 0; i < ARRAY_SIZE(skel->rodata->data_sizes); i++) {
29 snprintf(tname, sizeof(tname), "bin_data_%u", skel->rodata->data_sizes[i]);
30 id = btf__find_by_name_kind(btf, tname, BTF_KIND_STRUCT);
31 if (!ASSERT_GT(id, 0, tname))
33 skel->rodata->data_btf_ids[i] = id;
36 for (i = 0; i < ARRAY_SIZE(skel->rodata->percpu_data_sizes); i++) {
37 snprintf(tname, sizeof(tname), "percpu_bin_data_%u", skel->rodata->percpu_data_sizes[i]);
38 id = btf__find_by_name_kind(btf, tname, BTF_KIND_STRUCT);
39 if (!ASSERT_GT(id, 0, tname))
41 skel->rodata->percpu_data_btf_ids[i] = id;
44 prog = bpf_object__find_program_by_name(skel->obj, name);
45 if (!ASSERT_OK_PTR(prog, "invalid prog name"))
47 bpf_program__set_autoload(prog, true);
49 err = test_bpf_ma__load(skel);
50 if (!ASSERT_OK(err, "load"))
53 err = test_bpf_ma__attach(skel);
54 if (!ASSERT_OK(err, "attach"))
57 skel->bss->pid = getpid();
59 ASSERT_OK(skel->bss->err, "test error");
61 test_bpf_ma__destroy(skel);
64 void test_test_bpf_ma(void)
66 if (test__start_subtest("batch_alloc_free"))
67 do_bpf_ma_test("test_batch_alloc_free");
68 if (test__start_subtest("free_through_map_free"))
69 do_bpf_ma_test("test_free_through_map_free");
70 if (test__start_subtest("batch_percpu_alloc_free"))
71 do_bpf_ma_test("test_batch_percpu_alloc_free");
72 if (test__start_subtest("percpu_free_through_map_free"))
73 do_bpf_ma_test("test_percpu_free_through_map_free");