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 2839f8dc43SAlan Maguire SEC("uprobe") 29d41bc48bSAndrii Nakryiko int bench_trigger_uprobe(void *ctx) 30d41bc48bSAndrii Nakryiko { 31520fad2eSAndrii Nakryiko inc_counter(); 32d41bc48bSAndrii Nakryiko return 0; 33d41bc48bSAndrii Nakryiko } 347df4e597SAndrii Nakryiko 357df4e597SAndrii Nakryiko const volatile int batch_iters = 0; 367df4e597SAndrii Nakryiko 377df4e597SAndrii Nakryiko SEC("raw_tp") 387df4e597SAndrii Nakryiko int trigger_count(void *ctx) 397df4e597SAndrii Nakryiko { 407df4e597SAndrii Nakryiko int i; 417df4e597SAndrii Nakryiko 427df4e597SAndrii Nakryiko for (i = 0; i < batch_iters; i++) 437df4e597SAndrii Nakryiko inc_counter(); 447df4e597SAndrii Nakryiko 457df4e597SAndrii Nakryiko return 0; 467df4e597SAndrii Nakryiko } 477df4e597SAndrii Nakryiko 487df4e597SAndrii Nakryiko SEC("raw_tp") 497df4e597SAndrii Nakryiko int trigger_driver(void *ctx) 507df4e597SAndrii Nakryiko { 517df4e597SAndrii Nakryiko int i; 527df4e597SAndrii Nakryiko 537df4e597SAndrii Nakryiko for (i = 0; i < batch_iters; i++) 547df4e597SAndrii Nakryiko (void)bpf_get_numa_node_id(); /* attach point for benchmarking */ 557df4e597SAndrii Nakryiko 567df4e597SAndrii Nakryiko return 0; 577df4e597SAndrii Nakryiko } 587df4e597SAndrii Nakryiko 597df4e597SAndrii Nakryiko SEC("kprobe/bpf_get_numa_node_id") 60*208c4391SAndrii Nakryiko int bench_trigger_kprobe(void *ctx) 617df4e597SAndrii Nakryiko { 627df4e597SAndrii Nakryiko inc_counter(); 637df4e597SAndrii Nakryiko return 0; 647df4e597SAndrii Nakryiko } 657df4e597SAndrii Nakryiko 667df4e597SAndrii Nakryiko SEC("kretprobe/bpf_get_numa_node_id") 67*208c4391SAndrii Nakryiko int bench_trigger_kretprobe(void *ctx) 687df4e597SAndrii Nakryiko { 697df4e597SAndrii Nakryiko inc_counter(); 707df4e597SAndrii Nakryiko return 0; 717df4e597SAndrii Nakryiko } 727df4e597SAndrii Nakryiko 737df4e597SAndrii Nakryiko SEC("kprobe.multi/bpf_get_numa_node_id") 74*208c4391SAndrii Nakryiko int bench_trigger_kprobe_multi(void *ctx) 757df4e597SAndrii Nakryiko { 767df4e597SAndrii Nakryiko inc_counter(); 777df4e597SAndrii Nakryiko return 0; 787df4e597SAndrii Nakryiko } 797df4e597SAndrii Nakryiko 807df4e597SAndrii Nakryiko SEC("kretprobe.multi/bpf_get_numa_node_id") 81*208c4391SAndrii Nakryiko int bench_trigger_kretprobe_multi(void *ctx) 827df4e597SAndrii Nakryiko { 837df4e597SAndrii Nakryiko inc_counter(); 847df4e597SAndrii Nakryiko return 0; 857df4e597SAndrii Nakryiko } 867df4e597SAndrii Nakryiko 877df4e597SAndrii Nakryiko SEC("fentry/bpf_get_numa_node_id") 88*208c4391SAndrii Nakryiko int bench_trigger_fentry(void *ctx) 897df4e597SAndrii Nakryiko { 907df4e597SAndrii Nakryiko inc_counter(); 917df4e597SAndrii Nakryiko return 0; 927df4e597SAndrii Nakryiko } 937df4e597SAndrii Nakryiko 947df4e597SAndrii Nakryiko SEC("fexit/bpf_get_numa_node_id") 95*208c4391SAndrii Nakryiko int bench_trigger_fexit(void *ctx) 967df4e597SAndrii Nakryiko { 977df4e597SAndrii Nakryiko inc_counter(); 987df4e597SAndrii Nakryiko return 0; 997df4e597SAndrii Nakryiko } 100