]> Git Repo - J-linux.git/blob - tools/testing/selftests/bpf/progs/test_global_func_args.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / tools / testing / selftests / bpf / progs / test_global_func_args.c
1 // SPDX-License-Identifier: GPL-2.0
2
3 #include <linux/bpf.h>
4
5 #include <bpf/bpf_helpers.h>
6
7 struct S {
8         int v;
9 };
10
11 struct S global_variable = {};
12
13 struct {
14         __uint(type, BPF_MAP_TYPE_ARRAY);
15         __uint(max_entries, 7);
16         __type(key, __u32);
17         __type(value, int);
18 } values SEC(".maps");
19
20 static void save_value(__u32 index, int value)
21 {
22         bpf_map_update_elem(&values, &index, &value, 0);
23 }
24
25 __noinline int foo(__u32 index, struct S *s)
26 {
27         if (s) {
28                 save_value(index, s->v);
29                 return ++s->v;
30         }
31
32         save_value(index, 0);
33
34         return 1;
35 }
36
37 __noinline int bar(__u32 index, volatile struct S *s)
38 {
39         if (s) {
40                 save_value(index, s->v);
41                 return ++s->v;
42         }
43
44         save_value(index, 0);
45
46         return 1;
47 }
48
49 __noinline int baz(struct S **s)
50 {
51         if (s)
52                 *s = 0;
53
54         return 0;
55 }
56
57 SEC("cgroup_skb/ingress")
58 int test_cls(struct __sk_buff *skb)
59 {
60         __u32 index = 0;
61
62         {
63                 const int v = foo(index++, 0);
64
65                 save_value(index++, v);
66         }
67
68         {
69                 struct S s = { .v = 100 };
70
71                 foo(index++, &s);
72                 save_value(index++, s.v);
73         }
74
75         {
76                 global_variable.v = 42;
77                 bar(index++, &global_variable);
78                 save_value(index++, global_variable.v);
79         }
80
81         {
82                 struct S v, *p = &v;
83
84                 baz(&p);
85                 save_value(index++, !p);
86         }
87
88         return 0;
89 }
90
91 char _license[] SEC("license") = "GPL";
This page took 0.031332 seconds and 4 git commands to generate.