On April 25, 2025 11:41:21 PM GMT+03:00, Steven Rostedt <[email protected]> wrote: >From: Steven Rostedt <[email protected]> > >In order to know if a task is a user thread or a kernel thread it is >recommended to test the task flags for PF_KTHREAD. The old way was to >check if the task mm pointer is NULL. > >It is an easy mistake to not test the flag correctly, as: > > if (!(task->flag & PF_KTHREAD)) > >Is not immediately obvious that it's testing for a user thread. > >Add helper functions: > > is_user_thread() > is_kernel_thread() > >that can make seeing what is being tested for much more obvious: > > if (is_user_thread(task)) > >Link: https://lore.kernel.org/all/[email protected]/ > >Signed-off-by: Steven Rostedt (Google) <[email protected]> >--- > include/linux/sched.h | 10 ++++++++++ > 1 file changed, 10 insertions(+) > >diff --git a/include/linux/sched.h b/include/linux/sched.h >index f96ac1982893..823f38b0fd3e 100644 >--- a/include/linux/sched.h >+++ b/include/linux/sched.h >@@ -1785,6 +1785,16 @@ static __always_inline bool is_percpu_thread(void) > #endif > } > >+static __always_inline bool is_user_thread(struct task_struct *task) >+{ >+ return !(task->flags & PF_KTHREAD); >+} >+ >+static __always_inline bool is_kernel_thread(struct task_struct *task) >+{ >+ return task->flags & PF_KTHREAD;
return !is_user_thread(task); or the other way around. 🙂 -- Sent from a small device: formatting sucks and brevity is inevitable.
