diff options
author | Josh Poimboeuf <jpoimboe@kernel.org> | 2025-08-20 14:03:42 -0400 |
---|---|---|
committer | Peter Zijlstra <peterz@infradead.org> | 2025-08-26 09:51:13 +0200 |
commit | d77e3319e31098a6cb97b7ce4e71ba676e327fd7 (patch) | |
tree | 1bc4be3234e022686ea86f268e4a55fc2e81708e | |
parent | 90942f9fac05702065ff82ed0bade0d08168d4ea (diff) |
perf: Simplify get_perf_callchain() user logic
Simplify the get_perf_callchain() user logic a bit. task_pt_regs()
should never be NULL.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Link: https://lore.kernel.org/r/20250820180428.760066227@kernel.org
-rw-r--r-- | kernel/events/callchain.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c index 5982d18f169b..808c0d7a31fa 100644 --- a/kernel/events/callchain.c +++ b/kernel/events/callchain.c @@ -247,21 +247,19 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, bool user, if (user && !crosstask) { if (!user_mode(regs)) { if (current->flags & (PF_KTHREAD | PF_USER_WORKER)) - regs = NULL; - else - regs = task_pt_regs(current); + goto exit_put; + regs = task_pt_regs(current); } - if (regs) { - if (add_mark) - perf_callchain_store_context(&ctx, PERF_CONTEXT_USER); + if (add_mark) + perf_callchain_store_context(&ctx, PERF_CONTEXT_USER); - start_entry_idx = entry->nr; - perf_callchain_user(&ctx, regs); - fixup_uretprobe_trampoline_entries(entry, start_entry_idx); - } + start_entry_idx = entry->nr; + perf_callchain_user(&ctx, regs); + fixup_uretprobe_trampoline_entries(entry, start_entry_idx); } +exit_put: put_callchain_entry(rctx); return entry; |