150c6b8a9SHao Luo // SPDX-License-Identifier: GPL-2.0
250c6b8a9SHao Luo /* Copyright (c) 2022 Google */
350c6b8a9SHao Luo #include "vmlinux.h"
450c6b8a9SHao Luo #include <bpf/bpf_helpers.h>
550c6b8a9SHao Luo #include <bpf/bpf_tracing.h>
650c6b8a9SHao Luo
750c6b8a9SHao Luo struct bpf_testmod_btf_type_tag_1 {
850c6b8a9SHao Luo int a;
950c6b8a9SHao Luo };
1050c6b8a9SHao Luo
1150c6b8a9SHao Luo struct bpf_testmod_btf_type_tag_2 {
1250c6b8a9SHao Luo struct bpf_testmod_btf_type_tag_1 *p;
1350c6b8a9SHao Luo };
1450c6b8a9SHao Luo
1550c6b8a9SHao Luo __u64 g;
1650c6b8a9SHao Luo
1750c6b8a9SHao Luo SEC("fentry/bpf_testmod_test_btf_type_tag_percpu_1")
BPF_PROG(test_percpu1,struct bpf_testmod_btf_type_tag_1 * arg)1850c6b8a9SHao Luo int BPF_PROG(test_percpu1, struct bpf_testmod_btf_type_tag_1 *arg)
1950c6b8a9SHao Luo {
2050c6b8a9SHao Luo g = arg->a;
2150c6b8a9SHao Luo return 0;
2250c6b8a9SHao Luo }
2350c6b8a9SHao Luo
2450c6b8a9SHao Luo SEC("fentry/bpf_testmod_test_btf_type_tag_percpu_2")
BPF_PROG(test_percpu2,struct bpf_testmod_btf_type_tag_2 * arg)2550c6b8a9SHao Luo int BPF_PROG(test_percpu2, struct bpf_testmod_btf_type_tag_2 *arg)
2650c6b8a9SHao Luo {
2750c6b8a9SHao Luo g = arg->p->a;
2850c6b8a9SHao Luo return 0;
2950c6b8a9SHao Luo }
3050c6b8a9SHao Luo
3150c6b8a9SHao Luo /* trace_cgroup_mkdir(struct cgroup *cgrp, const char *path)
3250c6b8a9SHao Luo *
3350c6b8a9SHao Luo * struct cgroup_rstat_cpu {
3450c6b8a9SHao Luo * ...
3550c6b8a9SHao Luo * struct cgroup *updated_children;
3650c6b8a9SHao Luo * ...
3750c6b8a9SHao Luo * };
3850c6b8a9SHao Luo *
3950c6b8a9SHao Luo * struct cgroup {
4050c6b8a9SHao Luo * ...
4150c6b8a9SHao Luo * struct cgroup_rstat_cpu __percpu *rstat_cpu;
4250c6b8a9SHao Luo * ...
4350c6b8a9SHao Luo * };
4450c6b8a9SHao Luo */
4550c6b8a9SHao Luo SEC("tp_btf/cgroup_mkdir")
BPF_PROG(test_percpu_load,struct cgroup * cgrp,const char * path)4650c6b8a9SHao Luo int BPF_PROG(test_percpu_load, struct cgroup *cgrp, const char *path)
4750c6b8a9SHao Luo {
4850c6b8a9SHao Luo g = (__u64)cgrp->rstat_cpu->updated_children;
4950c6b8a9SHao Luo return 0;
5050c6b8a9SHao Luo }
5150c6b8a9SHao Luo
5250c6b8a9SHao Luo SEC("tp_btf/cgroup_mkdir")
BPF_PROG(test_percpu_helper,struct cgroup * cgrp,const char * path)5350c6b8a9SHao Luo int BPF_PROG(test_percpu_helper, struct cgroup *cgrp, const char *path)
5450c6b8a9SHao Luo {
5550c6b8a9SHao Luo struct cgroup_rstat_cpu *rstat;
5650c6b8a9SHao Luo __u32 cpu;
5750c6b8a9SHao Luo
5850c6b8a9SHao Luo cpu = bpf_get_smp_processor_id();
5950c6b8a9SHao Luo rstat = (struct cgroup_rstat_cpu *)bpf_per_cpu_ptr(cgrp->rstat_cpu, cpu);
6050c6b8a9SHao Luo if (rstat) {
6150c6b8a9SHao Luo /* READ_ONCE */
6250c6b8a9SHao Luo *(volatile int *)rstat;
6350c6b8a9SHao Luo }
6450c6b8a9SHao Luo
6550c6b8a9SHao Luo return 0;
6650c6b8a9SHao Luo }
67*c67cae55SAlexei Starovoitov char _license[] SEC("license") = "GPL";
68