1 | // SPDX-License-Identifier: GPL-2.0 |
2 | /* Copyright (c) 2022 Google */ |
3 | #include "vmlinux.h" |
4 | #include <bpf/bpf_helpers.h> |
5 | #include <bpf/bpf_tracing.h> |
6 | |
7 | struct bpf_testmod_btf_type_tag_1 { |
8 | int a; |
9 | }; |
10 | |
11 | struct bpf_testmod_btf_type_tag_2 { |
12 | struct bpf_testmod_btf_type_tag_1 *p; |
13 | }; |
14 | |
15 | __u64 g; |
16 | |
17 | SEC("fentry/bpf_testmod_test_btf_type_tag_percpu_1" ) |
18 | int BPF_PROG(test_percpu1, struct bpf_testmod_btf_type_tag_1 *arg) |
19 | { |
20 | g = arg->a; |
21 | return 0; |
22 | } |
23 | |
24 | SEC("fentry/bpf_testmod_test_btf_type_tag_percpu_2" ) |
25 | int BPF_PROG(test_percpu2, struct bpf_testmod_btf_type_tag_2 *arg) |
26 | { |
27 | g = arg->p->a; |
28 | return 0; |
29 | } |
30 | |
31 | /* trace_cgroup_mkdir(struct cgroup *cgrp, const char *path) |
32 | * |
33 | * struct cgroup_rstat_cpu { |
34 | * ... |
35 | * struct cgroup *updated_children; |
36 | * ... |
37 | * }; |
38 | * |
39 | * struct cgroup { |
40 | * ... |
41 | * struct cgroup_rstat_cpu __percpu *rstat_cpu; |
42 | * ... |
43 | * }; |
44 | */ |
45 | SEC("tp_btf/cgroup_mkdir" ) |
46 | int BPF_PROG(test_percpu_load, struct cgroup *cgrp, const char *path) |
47 | { |
48 | g = (__u64)cgrp->rstat_cpu->updated_children; |
49 | return 0; |
50 | } |
51 | |
52 | SEC("tp_btf/cgroup_mkdir" ) |
53 | int BPF_PROG(test_percpu_helper, struct cgroup *cgrp, const char *path) |
54 | { |
55 | struct cgroup_rstat_cpu *rstat; |
56 | __u32 cpu; |
57 | |
58 | cpu = bpf_get_smp_processor_id(); |
59 | rstat = (struct cgroup_rstat_cpu *)bpf_per_cpu_ptr(cgrp->rstat_cpu, cpu); |
60 | if (rstat) { |
61 | /* READ_ONCE */ |
62 | *(volatile int *)rstat; |
63 | } |
64 | |
65 | return 0; |
66 | } |
67 | char _license[] SEC("license" ) = "GPL" ; |
68 | |