[PATCH v6 13/18] perf: Skip user unwind if the task is a kernel thread.
Steven Rostedt <[email protected]> Fri, 25 Apr 2025 10:54:35 -0400
| Newsgroups | org.kernel.vger.linux-toolchains,org.kernel.vger.linux-kernel,org.kernel.vger.linux-perf-users,org.kernel.vger.linux-trace-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Josh Poimboeuf <[email protected]> If the task is not a user thread, there's no user stack to unwind. Signed-off-by: Josh Poimboeuf <[email protected]> Signed-off-by: Steven Rostedt (Google) <[email protected]> --- Changes since v5: https://lore.kernel.org/[email protected] - Use current->flags & PF_KTHREAD instead of current->mm == NULL. (Peter Zijlstra) kernel/events/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index 430dd158b1ee..ec9edf602974 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -8101,7 +8101,8 @@ struct perf_callchain_entry * perf_callchain(struct perf_event *event, struct pt_regs *regs) { bool kernel = !event->attr.exclude_callchain_kernel; - bool user = !event->attr.exclude_callchain_user; + bool user = !event->attr.exclude_callchain_user && + !(current->flags & PF_KTHREAD); /* Disallow cross-task user callchains. */ bool crosstask = event->ctx->task && event->ctx->task != current; const u32 max_stack = event->attr.sample_max_stack; -- 2.47.2