summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNamhyung Kim <namhyung@kernel.org>2026-02-25 17:49:55 -0800
committerNamhyung Kim <namhyung@kernel.org>2026-02-26 10:49:00 -0800
commitaf894feb32570cafea582b100d674b042479544f (patch)
treef03686f3dbbb211337204b07c8409fcf6f8b7c50
parent96f202eab8133f94479b14a32902c636e9bdf6af (diff)
perf trace: Handle task exit in BPF syscall summary
Some system calls never return because it'd terminate the calling thread. Let's hook the task exit path and update the duration of the last syscall. Before: $ sudo perf trace -as --bpf-summary -- true |& grep exit (nothing) After: $ sudo perf trace -as --bpf-summary -- true |& grep exit exit_group 1 0 0.004 0.004 0.004 0.004 0.00% Reviewed-by: Ian Rogers <irogers@google.com> Acked-by: Howard Chu <howardchu95@gmail.com> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
-rw-r--r--tools/perf/util/bpf_skel/syscall_summary.bpf.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/tools/perf/util/bpf_skel/syscall_summary.bpf.c b/tools/perf/util/bpf_skel/syscall_summary.bpf.c
index 1bcd066a5199..4172f3c9fc48 100644
--- a/tools/perf/util/bpf_skel/syscall_summary.bpf.c
+++ b/tools/perf/util/bpf_skel/syscall_summary.bpf.c
@@ -118,13 +118,11 @@ int sys_enter(u64 *ctx)
return 0;
}
-SEC("tp_btf/sys_exit")
-int sys_exit(u64 *ctx)
+static int do_exit(long ret)
{
int tid;
int key = 0;
u64 cgroup = 0;
- long ret = ctx[1]; /* return value of the syscall */
struct syscall_trace *st;
s64 delta;
@@ -150,4 +148,18 @@ int sys_exit(u64 *ctx)
return 0;
}
+SEC("tp_btf/sys_exit")
+int sys_exit(u64 *ctx)
+{
+ long ret = ctx[1]; /* return value of the syscall */
+
+ return do_exit(ret);
+}
+
+SEC("tp_btf/sched_process_exit")
+int process_exit(u64 *ctx)
+{
+ return do_exit(0);
+}
+
char _license[] SEC("license") = "GPL";