1*387f9dfdSAndroid Build Coastguard Worker #include <uapi/linux/ptrace.h> 2*387f9dfdSAndroid Build Coastguard Worker #include <linux/sched.h> 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Worker struct key_t { 5*387f9dfdSAndroid Build Coastguard Worker u32 prev_pid; 6*387f9dfdSAndroid Build Coastguard Worker u32 curr_pid; 7*387f9dfdSAndroid Build Coastguard Worker }; 8*387f9dfdSAndroid Build Coastguard Worker 9*387f9dfdSAndroid Build Coastguard Worker BPF_HASH(stats, struct key_t, u64, 1024); count_sched(struct pt_regs * ctx,struct task_struct * prev)10*387f9dfdSAndroid Build Coastguard Workerint count_sched(struct pt_regs *ctx, struct task_struct *prev) { 11*387f9dfdSAndroid Build Coastguard Worker struct key_t key = {}; 12*387f9dfdSAndroid Build Coastguard Worker u64 zero = 0, *val; 13*387f9dfdSAndroid Build Coastguard Worker 14*387f9dfdSAndroid Build Coastguard Worker key.curr_pid = bpf_get_current_pid_tgid(); 15*387f9dfdSAndroid Build Coastguard Worker key.prev_pid = prev->pid; 16*387f9dfdSAndroid Build Coastguard Worker 17*387f9dfdSAndroid Build Coastguard Worker // could also use `stats.increment(key);` 18*387f9dfdSAndroid Build Coastguard Worker val = stats.lookup_or_try_init(&key, &zero); 19*387f9dfdSAndroid Build Coastguard Worker if (val) { 20*387f9dfdSAndroid Build Coastguard Worker (*val)++; 21*387f9dfdSAndroid Build Coastguard Worker } 22*387f9dfdSAndroid Build Coastguard Worker return 0; 23*387f9dfdSAndroid Build Coastguard Worker } 24