diff options
Diffstat (limited to 'tools/perf/util/bpf_skel/func_latency.bpf.c')
-rw-r--r-- | tools/perf/util/bpf_skel/func_latency.bpf.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/tools/perf/util/bpf_skel/func_latency.bpf.c b/tools/perf/util/bpf_skel/func_latency.bpf.c index 00a340ca1543..a89d2b4c3817 100644 --- a/tools/perf/util/bpf_skel/func_latency.bpf.c +++ b/tools/perf/util/bpf_skel/func_latency.bpf.c @@ -42,6 +42,7 @@ const volatile int has_cpu = 0; const volatile int has_task = 0; const volatile int use_nsec = 0; const volatile unsigned int bucket_range; +const volatile unsigned int min_latency; SEC("kprobe/func") int BPF_PROG(func_begin) @@ -93,7 +94,7 @@ int BPF_PROG(func_end) start = bpf_map_lookup_elem(&functime, &tid); if (start) { __s64 delta = bpf_ktime_get_ns() - *start; - __u32 key; + __u32 key = 0; __u64 *hist; bpf_map_delete_elem(&functime, &tid); @@ -103,9 +104,16 @@ int BPF_PROG(func_end) if (bucket_range != 0) { delta /= cmp_base; + + if (min_latency > 0) { + if (delta > min_latency) + delta -= min_latency; + else + goto do_lookup; + } + // Less than 1 unit (ms or ns), or, in the future, // than the min latency desired. - key = 0; if (delta > 0) { // 1st entry: [ 1 unit .. bucket_range units ) key = delta / bucket_range + 1; if (key >= NUM_BUCKET) |