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