platform/x86/amd/pmc: Extend Framework 13 quirk to more BIOSes
[sfrench/cifs-2.6.git] / tools / testing / selftests / bpf / prog_tests / arena_list.c
1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright (c) 2024 Meta Platforms, Inc. and affiliates. */
3 #include <test_progs.h>
4 #include <sys/mman.h>
5 #include <network_helpers.h>
6
7 #define PAGE_SIZE 4096
8
9 #include "bpf_arena_list.h"
10 #include "arena_list.skel.h"
11
12 struct elem {
13         struct arena_list_node node;
14         __u64 value;
15 };
16
17 static int list_sum(struct arena_list_head *head)
18 {
19         struct elem __arena *n;
20         int sum = 0;
21
22         list_for_each_entry(n, head, node)
23                 sum += n->value;
24         return sum;
25 }
26
27 static void test_arena_list_add_del(int cnt)
28 {
29         LIBBPF_OPTS(bpf_test_run_opts, opts);
30         struct arena_list *skel;
31         int expected_sum = (u64)cnt * (cnt - 1) / 2;
32         int ret, sum;
33
34         skel = arena_list__open_and_load();
35         if (!ASSERT_OK_PTR(skel, "arena_list__open_and_load"))
36                 return;
37
38         skel->bss->cnt = cnt;
39         ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.arena_list_add), &opts);
40         ASSERT_OK(ret, "ret_add");
41         ASSERT_OK(opts.retval, "retval");
42         if (skel->bss->skip) {
43                 printf("%s:SKIP:compiler doesn't support arena_cast\n", __func__);
44                 test__skip();
45                 goto out;
46         }
47         sum = list_sum(skel->bss->list_head);
48         ASSERT_EQ(sum, expected_sum, "sum of elems");
49         ASSERT_EQ(skel->arena->arena_sum, expected_sum, "__arena sum of elems");
50         ASSERT_EQ(skel->arena->test_val, cnt + 1, "num of elems");
51
52         ret = bpf_prog_test_run_opts(bpf_program__fd(skel->progs.arena_list_del), &opts);
53         ASSERT_OK(ret, "ret_del");
54         sum = list_sum(skel->bss->list_head);
55         ASSERT_EQ(sum, 0, "sum of list elems after del");
56         ASSERT_EQ(skel->bss->list_sum, expected_sum, "sum of list elems computed by prog");
57         ASSERT_EQ(skel->arena->arena_sum, expected_sum, "__arena sum of elems");
58 out:
59         arena_list__destroy(skel);
60 }
61
62 void test_arena_list(void)
63 {
64         if (test__start_subtest("arena_list_1"))
65                 test_arena_list_add_del(1);
66         if (test__start_subtest("arena_list_1000"))
67                 test_arena_list_add_del(1000);
68 }