kthreadd is a kernel daemon, it starts when the kernel boots.
init/main.c ---> kernel_thread(kthreadd,...) (architecture dependent code for eg arch/arm/kernel/process.c)
As you can see here, kernel_thread() returns pid . From pid we define task_struct and assign it kthreadd_task .
Therefore, whenever a call is made to create a kernel thread, i.e. kthread_create() , kthreadd_task , which inturn calls kthreadd() (defined in kernel/kthread.c ).
Srikanth
source share