Alexei Starovoitov | b6e43a2 | 2015-06-18 14:41:17 -0700 | [diff] [blame] | 1 | #include <uapi/linux/ptrace.h> |
| 2 | #include <linux/sched.h> |
| 3 | |
| 4 | struct key_t { |
| 5 | u32 prev_pid; |
| 6 | u32 curr_pid; |
| 7 | }; |
| 8 | // map_type, key_type, leaf_type, table_name, num_entry |
| 9 | BPF_TABLE("hash", struct key_t, u64, stats, 1024); |
Brenden Blanco | b711d45 | 2015-07-01 15:23:18 -0700 | [diff] [blame] | 10 | int count_sched(struct pt_regs *ctx, struct task_struct *prev) { |
Alexei Starovoitov | b6e43a2 | 2015-06-18 14:41:17 -0700 | [diff] [blame] | 11 | struct key_t key = {}; |
| 12 | u64 zero = 0, *val; |
| 13 | |
| 14 | key.curr_pid = bpf_get_current_pid_tgid(); |
Brenden Blanco | b711d45 | 2015-07-01 15:23:18 -0700 | [diff] [blame] | 15 | key.prev_pid = prev->pid; |
Alexei Starovoitov | b6e43a2 | 2015-06-18 14:41:17 -0700 | [diff] [blame] | 16 | |
| 17 | val = stats.lookup_or_init(&key, &zero); |
| 18 | (*val)++; |
| 19 | return 0; |
| 20 | } |
| 21 | |