example that shows usages of maps, probe_read, get_current_pid helpers

$ ./task_switch.py

task_switch[ 2379->    0]=4
task_switch[ 3914->    0]=2
task_switch[ 3133->    0]=5
task_switch[10903->    0]=100  <-- 100 times python process switched into idle
task_switch[  116->    0]=1
task_switch[    0->   14]=1
task_switch[10803->    0]=1
task_switch[22292->    0]=1
task_switch[    0->22292]=1
task_switch[    0->10803]=1
task_switch[   30->    0]=1
task_switch[    0->10903]=100  <-- 100 times back into python

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
diff --git a/examples/task_switch.c b/examples/task_switch.c
new file mode 100644
index 0000000..e6e66ed
--- /dev/null
+++ b/examples/task_switch.c
@@ -0,0 +1,22 @@
+#include <uapi/linux/ptrace.h>
+#include <linux/sched.h>
+
+struct key_t {
+  u32 prev_pid;
+  u32 curr_pid;
+};
+// map_type, key_type, leaf_type, table_name, num_entry
+BPF_TABLE("hash", struct key_t, u64, stats, 1024);
+int count_sched(struct pt_regs *ctx) {
+  struct key_t key = {};
+  u64 zero = 0, *val;
+
+  key.curr_pid = bpf_get_current_pid_tgid();
+  bpf_probe_read(&key.prev_pid, 4,
+		 (void *)ctx->di + offsetof(struct task_struct, pid));
+
+  val = stats.lookup_or_init(&key, &zero);
+  (*val)++;
+  return 0;
+}
+