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.

Reply via email to