1c5d420c3SAndrii Nakryiko // SPDX-License-Identifier: GPL-2.0 2c5d420c3SAndrii Nakryiko // Copyright (c) 2020 Facebook 3c5d420c3SAndrii Nakryiko #include <linux/bpf.h> 4c5d420c3SAndrii Nakryiko #include <asm/unistd.h> 5c5d420c3SAndrii Nakryiko #include <bpf/bpf_helpers.h> 6c5d420c3SAndrii Nakryiko #include <bpf/bpf_tracing.h> 7e91d280cSNaveen N. Rao #include "bpf_misc.h" 8c5d420c3SAndrii Nakryiko 9c5d420c3SAndrii Nakryiko char _license[] SEC("license") = "GPL"; 10c5d420c3SAndrii Nakryiko 11520fad2eSAndrii Nakryiko #define CPU_MASK 255 12520fad2eSAndrii Nakryiko #define MAX_CPUS (CPU_MASK + 1) /* should match MAX_BUCKETS in benchs/bench_trigger.c */ 13520fad2eSAndrii Nakryiko 14520fad2eSAndrii Nakryiko /* matches struct counter in bench.h */ 15520fad2eSAndrii Nakryiko struct counter { 16520fad2eSAndrii Nakryiko long value; 17520fad2eSAndrii Nakryiko } __attribute__((aligned(128))); 18520fad2eSAndrii Nakryiko 19520fad2eSAndrii Nakryiko struct counter hits[MAX_CPUS]; 20520fad2eSAndrii Nakryiko 21520fad2eSAndrii Nakryiko static __always_inline void inc_counter(void) 22520fad2eSAndrii Nakryiko { 23520fad2eSAndrii Nakryiko int cpu = bpf_get_smp_processor_id(); 24520fad2eSAndrii Nakryiko 25520fad2eSAndrii Nakryiko __sync_add_and_fetch(&hits[cpu & CPU_MASK].value, 1); 26520fad2eSAndrii Nakryiko } 27c5d420c3SAndrii Nakryiko 28c5d420c3SAndrii Nakryiko SEC("tp/syscalls/sys_enter_getpgid") 29c5d420c3SAndrii Nakryiko int bench_trigger_tp(void *ctx) 30c5d420c3SAndrii Nakryiko { 31520fad2eSAndrii Nakryiko inc_counter(); 32c5d420c3SAndrii Nakryiko return 0; 33c5d420c3SAndrii Nakryiko } 34c5d420c3SAndrii Nakryiko 35c5d420c3SAndrii Nakryiko SEC("raw_tp/sys_enter") 36c5d420c3SAndrii Nakryiko int BPF_PROG(bench_trigger_raw_tp, struct pt_regs *regs, long id) 37c5d420c3SAndrii Nakryiko { 38c5d420c3SAndrii Nakryiko if (id == __NR_getpgid) 39520fad2eSAndrii Nakryiko inc_counter(); 40c5d420c3SAndrii Nakryiko return 0; 41c5d420c3SAndrii Nakryiko } 42c5d420c3SAndrii Nakryiko 43e91d280cSNaveen N. Rao SEC("kprobe/" SYS_PREFIX "sys_getpgid") 44c5d420c3SAndrii Nakryiko int bench_trigger_kprobe(void *ctx) 45c5d420c3SAndrii Nakryiko { 46520fad2eSAndrii Nakryiko inc_counter(); 47c5d420c3SAndrii Nakryiko return 0; 48c5d420c3SAndrii Nakryiko } 49c5d420c3SAndrii Nakryiko 50365c2b32SAndrii Nakryiko SEC("kretprobe/" SYS_PREFIX "sys_getpgid") 51365c2b32SAndrii Nakryiko int bench_trigger_kretprobe(void *ctx) 52365c2b32SAndrii Nakryiko { 53520fad2eSAndrii Nakryiko inc_counter(); 54365c2b32SAndrii Nakryiko return 0; 55365c2b32SAndrii Nakryiko } 56365c2b32SAndrii Nakryiko 57379b97bbSJiri Olsa SEC("kprobe.multi/" SYS_PREFIX "sys_getpgid") 58379b97bbSJiri Olsa int bench_trigger_kprobe_multi(void *ctx) 59379b97bbSJiri Olsa { 60520fad2eSAndrii Nakryiko inc_counter(); 61379b97bbSJiri Olsa return 0; 62379b97bbSJiri Olsa } 63379b97bbSJiri Olsa 64379b97bbSJiri Olsa SEC("kretprobe.multi/" SYS_PREFIX "sys_getpgid") 65379b97bbSJiri Olsa int bench_trigger_kretprobe_multi(void *ctx) 66379b97bbSJiri Olsa { 67520fad2eSAndrii Nakryiko inc_counter(); 68379b97bbSJiri Olsa return 0; 69379b97bbSJiri Olsa } 70379b97bbSJiri Olsa 71e91d280cSNaveen N. Rao SEC("fentry/" SYS_PREFIX "sys_getpgid") 72c5d420c3SAndrii Nakryiko int bench_trigger_fentry(void *ctx) 73c5d420c3SAndrii Nakryiko { 74520fad2eSAndrii Nakryiko inc_counter(); 75c5d420c3SAndrii Nakryiko return 0; 76c5d420c3SAndrii Nakryiko } 77c5d420c3SAndrii Nakryiko 78365c2b32SAndrii Nakryiko SEC("fexit/" SYS_PREFIX "sys_getpgid") 79365c2b32SAndrii Nakryiko int bench_trigger_fexit(void *ctx) 80365c2b32SAndrii Nakryiko { 81520fad2eSAndrii Nakryiko inc_counter(); 82365c2b32SAndrii Nakryiko return 0; 83365c2b32SAndrii Nakryiko } 84365c2b32SAndrii Nakryiko 85e91d280cSNaveen N. Rao SEC("fentry.s/" SYS_PREFIX "sys_getpgid") 86e68a1445SAlexei Starovoitov int bench_trigger_fentry_sleep(void *ctx) 87e68a1445SAlexei Starovoitov { 88520fad2eSAndrii Nakryiko inc_counter(); 89e68a1445SAlexei Starovoitov return 0; 90e68a1445SAlexei Starovoitov } 91e68a1445SAlexei Starovoitov 92e91d280cSNaveen N. Rao SEC("fmod_ret/" SYS_PREFIX "sys_getpgid") 93c5d420c3SAndrii Nakryiko int bench_trigger_fmodret(void *ctx) 94c5d420c3SAndrii Nakryiko { 95520fad2eSAndrii Nakryiko inc_counter(); 96c5d420c3SAndrii Nakryiko return -22; 97c5d420c3SAndrii Nakryiko } 98d41bc48bSAndrii Nakryiko 9939f8dc43SAlan Maguire SEC("uprobe") 100d41bc48bSAndrii Nakryiko int bench_trigger_uprobe(void *ctx) 101d41bc48bSAndrii Nakryiko { 102520fad2eSAndrii Nakryiko inc_counter(); 103d41bc48bSAndrii Nakryiko return 0; 104d41bc48bSAndrii Nakryiko } 105*7df4e597SAndrii Nakryiko 106*7df4e597SAndrii Nakryiko const volatile int batch_iters = 0; 107*7df4e597SAndrii Nakryiko 108*7df4e597SAndrii Nakryiko SEC("raw_tp") 109*7df4e597SAndrii Nakryiko int trigger_count(void *ctx) 110*7df4e597SAndrii Nakryiko { 111*7df4e597SAndrii Nakryiko int i; 112*7df4e597SAndrii Nakryiko 113*7df4e597SAndrii Nakryiko for (i = 0; i < batch_iters; i++) 114*7df4e597SAndrii Nakryiko inc_counter(); 115*7df4e597SAndrii Nakryiko 116*7df4e597SAndrii Nakryiko return 0; 117*7df4e597SAndrii Nakryiko } 118*7df4e597SAndrii Nakryiko 119*7df4e597SAndrii Nakryiko SEC("raw_tp") 120*7df4e597SAndrii Nakryiko int trigger_driver(void *ctx) 121*7df4e597SAndrii Nakryiko { 122*7df4e597SAndrii Nakryiko int i; 123*7df4e597SAndrii Nakryiko 124*7df4e597SAndrii Nakryiko for (i = 0; i < batch_iters; i++) 125*7df4e597SAndrii Nakryiko (void)bpf_get_numa_node_id(); /* attach point for benchmarking */ 126*7df4e597SAndrii Nakryiko 127*7df4e597SAndrii Nakryiko return 0; 128*7df4e597SAndrii Nakryiko } 129*7df4e597SAndrii Nakryiko 130*7df4e597SAndrii Nakryiko SEC("kprobe/bpf_get_numa_node_id") 131*7df4e597SAndrii Nakryiko int bench_trigger_kprobe_batch(void *ctx) 132*7df4e597SAndrii Nakryiko { 133*7df4e597SAndrii Nakryiko inc_counter(); 134*7df4e597SAndrii Nakryiko return 0; 135*7df4e597SAndrii Nakryiko } 136*7df4e597SAndrii Nakryiko 137*7df4e597SAndrii Nakryiko SEC("kretprobe/bpf_get_numa_node_id") 138*7df4e597SAndrii Nakryiko int bench_trigger_kretprobe_batch(void *ctx) 139*7df4e597SAndrii Nakryiko { 140*7df4e597SAndrii Nakryiko inc_counter(); 141*7df4e597SAndrii Nakryiko return 0; 142*7df4e597SAndrii Nakryiko } 143*7df4e597SAndrii Nakryiko 144*7df4e597SAndrii Nakryiko SEC("kprobe.multi/bpf_get_numa_node_id") 145*7df4e597SAndrii Nakryiko int bench_trigger_kprobe_multi_batch(void *ctx) 146*7df4e597SAndrii Nakryiko { 147*7df4e597SAndrii Nakryiko inc_counter(); 148*7df4e597SAndrii Nakryiko return 0; 149*7df4e597SAndrii Nakryiko } 150*7df4e597SAndrii Nakryiko 151*7df4e597SAndrii Nakryiko SEC("kretprobe.multi/bpf_get_numa_node_id") 152*7df4e597SAndrii Nakryiko int bench_trigger_kretprobe_multi_batch(void *ctx) 153*7df4e597SAndrii Nakryiko { 154*7df4e597SAndrii Nakryiko inc_counter(); 155*7df4e597SAndrii Nakryiko return 0; 156*7df4e597SAndrii Nakryiko } 157*7df4e597SAndrii Nakryiko 158*7df4e597SAndrii Nakryiko SEC("fentry/bpf_get_numa_node_id") 159*7df4e597SAndrii Nakryiko int bench_trigger_fentry_batch(void *ctx) 160*7df4e597SAndrii Nakryiko { 161*7df4e597SAndrii Nakryiko inc_counter(); 162*7df4e597SAndrii Nakryiko return 0; 163*7df4e597SAndrii Nakryiko } 164*7df4e597SAndrii Nakryiko 165*7df4e597SAndrii Nakryiko SEC("fexit/bpf_get_numa_node_id") 166*7df4e597SAndrii Nakryiko int bench_trigger_fexit_batch(void *ctx) 167*7df4e597SAndrii Nakryiko { 168*7df4e597SAndrii Nakryiko inc_counter(); 169*7df4e597SAndrii Nakryiko return 0; 170*7df4e597SAndrii Nakryiko } 171