1*85521e1eSKumar Kartikeya Dwivedi // SPDX-License-Identifier: GPL-2.0
2*85521e1eSKumar Kartikeya Dwivedi #include <vmlinux.h>
3*85521e1eSKumar Kartikeya Dwivedi #include <bpf/bpf_tracing.h>
4*85521e1eSKumar Kartikeya Dwivedi #include <bpf/bpf_helpers.h>
5*85521e1eSKumar Kartikeya Dwivedi 
6*85521e1eSKumar Kartikeya Dwivedi struct task_ls_map {
7*85521e1eSKumar Kartikeya Dwivedi 	__uint(type, BPF_MAP_TYPE_TASK_STORAGE);
8*85521e1eSKumar Kartikeya Dwivedi 	__uint(map_flags, BPF_F_NO_PREALLOC);
9*85521e1eSKumar Kartikeya Dwivedi 	__type(key, int);
10*85521e1eSKumar Kartikeya Dwivedi 	__type(value, int);
11*85521e1eSKumar Kartikeya Dwivedi } task_ls_map SEC(".maps");
12*85521e1eSKumar Kartikeya Dwivedi 
13*85521e1eSKumar Kartikeya Dwivedi long gp_seq;
14*85521e1eSKumar Kartikeya Dwivedi 
15*85521e1eSKumar Kartikeya Dwivedi SEC("syscall")
do_call_rcu_tasks_trace(void * ctx)16*85521e1eSKumar Kartikeya Dwivedi int do_call_rcu_tasks_trace(void *ctx)
17*85521e1eSKumar Kartikeya Dwivedi {
18*85521e1eSKumar Kartikeya Dwivedi     struct task_struct *current;
19*85521e1eSKumar Kartikeya Dwivedi     int *v;
20*85521e1eSKumar Kartikeya Dwivedi 
21*85521e1eSKumar Kartikeya Dwivedi     current = bpf_get_current_task_btf();
22*85521e1eSKumar Kartikeya Dwivedi     v = bpf_task_storage_get(&task_ls_map, current, NULL, BPF_LOCAL_STORAGE_GET_F_CREATE);
23*85521e1eSKumar Kartikeya Dwivedi     if (!v)
24*85521e1eSKumar Kartikeya Dwivedi         return 1;
25*85521e1eSKumar Kartikeya Dwivedi     /* Invoke call_rcu_tasks_trace */
26*85521e1eSKumar Kartikeya Dwivedi     return bpf_task_storage_delete(&task_ls_map, current);
27*85521e1eSKumar Kartikeya Dwivedi }
28*85521e1eSKumar Kartikeya Dwivedi 
29*85521e1eSKumar Kartikeya Dwivedi SEC("kprobe/rcu_tasks_trace_postgp")
rcu_tasks_trace_postgp(void * ctx)30*85521e1eSKumar Kartikeya Dwivedi int rcu_tasks_trace_postgp(void *ctx)
31*85521e1eSKumar Kartikeya Dwivedi {
32*85521e1eSKumar Kartikeya Dwivedi     __sync_add_and_fetch(&gp_seq, 1);
33*85521e1eSKumar Kartikeya Dwivedi     return 0;
34*85521e1eSKumar Kartikeya Dwivedi }
35*85521e1eSKumar Kartikeya Dwivedi 
36*85521e1eSKumar Kartikeya Dwivedi char _license[] SEC("license") = "GPL";
37