From: Steven Rostedt <rost...@goodmis.org>

To determine if a task is a kernel thread or not, it is more reliable to
use (current->flags & PF_KTHREAD) than to rely on current->mm being NULL.
That is because some kernel tasks (io_uring helpers) may have a mm field.

Link: 
https://lore.kernel.org/linux-trace-kernel/20250424163607.ge18...@noisy.programming.kicks-ass.net/

Signed-off-by: Steven Rostedt (Google) <rost...@goodmis.org>
---
 kernel/events/callchain.c | 6 +++---
 kernel/events/core.c      | 2 +-
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/kernel/events/callchain.c b/kernel/events/callchain.c
index abf258913ab6..cda145dc11bd 100644
--- a/kernel/events/callchain.c
+++ b/kernel/events/callchain.c
@@ -246,10 +246,10 @@ get_perf_callchain(struct pt_regs *regs, bool kernel, 
bool user,
 
        if (user) {
                if (!user_mode(regs)) {
-                       if  (current->mm)
-                               regs = task_pt_regs(current);
-                       else
+                       if (current->flags & PF_KTHREAD)
                                regs = NULL;
+                       else
+                               regs = task_pt_regs(current);
                }
 
                if (regs) {
diff --git a/kernel/events/core.c b/kernel/events/core.c
index d8688668d21a..375115492c02 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -8032,7 +8032,7 @@ static u64 perf_virt_to_phys(u64 virt)
                 * Try IRQ-safe get_user_page_fast_only first.
                 * If failed, leave phys_addr as 0.
                 */
-               if (current->mm != NULL) {
+               if (!(current->flags & PF_KTHREAD)) {
                        struct page *p;
 
                        pagefault_disable();
-- 
2.47.2



Reply via email to