summaryrefslogtreecommitdiff
path: root/kernel/events
diff options
context:
space:
mode:
authorJosh Poimboeuf <jpoimboe@kernel.org>2025-08-20 14:03:43 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2025-11-02 22:15:20 +0900
commitd6c55b581ca723f777657823b0466d3544ff0c35 (patch)
tree6b15b061be4d2f0d5d1b8b5e25d603768078f05a /kernel/events
parent8d33b133b89c43915a40dfb41660d7fb76414bf3 (diff)
downloadlinux-d6c55b581ca723f777657823b0466d3544ff0c35.tar.gz
linux-d6c55b581ca723f777657823b0466d3544ff0c35.tar.bz2
linux-d6c55b581ca723f777657823b0466d3544ff0c35.zip
perf: Skip user unwind if the task is a kernel thread
[ Upstream commit 16ed389227651330879e17bd83d43bd234006722 ] If the task is not a user thread, there's no user stack to unwind. 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> Link: https://lore.kernel.org/r/20250820180428.930791978@kernel.org Signed-off-by: Sasha Levin <sashal@kernel.org>
Diffstat (limited to 'kernel/events')
-rw-r--r--kernel/events/core.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c
index 0339f60e3498..d6a86d8e9e59 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -7847,7 +7847,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 | PF_USER_WORKER));
/* Disallow cross-task user callchains. */
bool crosstask = event->ctx->task && event->ctx->task != current;
const u32 max_stack = event->attr.sample_max_stack;