Re: re. Spurious wakeup on a newly created kthread

From: Eric W. Biederman
Date: Sat Jun 25 2022 - 20:22:06 EST


Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> writes:

> On Sat, Jun 25, 2022 at 4:28 PM Eric W. Biederman <ebiederm@xxxxxxxxxxxx> wrote:
>>
>> I presume you mean kthreadd games?
>
> Yeah, sorry.
>
>> So with the introduction of kthreadd the kernel threads were moved
>> out of the userspace process tree, and userspace stopped being able to
>> influence the kernel threads.
>
> Ahh. So essentially it's indeed just basically the parenting issue.

That is one way to look at it. The way I described it at the time was:

> commit 73c279927f89561ecb45b2dfdf9314bafcfd9f67
> Author: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>
> Date: Wed May 9 02:34:32 2007 -0700
>
> kthread: don't depend on work queues
>
> Currently there is a circular reference between work queue initialization
> and kthread initialization. This prevents the kthread infrastructure from
> initializing until after work queues have been initialized.
>
> We want the properties of tasks created with kthread_create to be as close
> as possible to the init_task and to not be contaminated by user processes.
> The later we start our kthreadd that creates these tasks the harder it is
> to avoid contamination from user processes and the more of a mess we have
> to clean up because the defaults have changed on us.
>
> So this patch modifies the kthread support to not use work queues but to
> instead use a simple list of structures, and to have kthreadd start from
> init_task immediately after our kernel thread that execs /sbin/init.
>
> By being a true child of init_task we only have to change those process
> settings that we want to have different from init_task, such as our process
> name, the cpus that are allowed, blocking all signals and setting SIGCHLD
> to SIG_IGN so that all of our children are reaped automatically.
>
> By being a true child of init_task we also naturally get our ppid set to 0
> and do not wind up as a child of PID == 1. Ensuring that tasks generated
> by kthread_create will not slow down the functioning of the wait family of
> functions.
>
> [akpm@xxxxxxxxxxxxxxxxxxxx: use interruptible sleeps]
> Signed-off-by: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>
> Cc: Oleg Nesterov <oleg@xxxxxxxxxx>
> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>

Eric