On 11/5/05, Yan Zheng <[email protected]> wrote:
> Hi.
>
> In LKD2, Robert say:
> Linux delegates several tasks to kernel threads, most notably the pdflush task and the ksoftirqd task. These threads are created on system boot by other kernel threads. Indeed, a kernel thread can be created only by another kernel thread.
>
>
> But I found that kernel_thread(...) are used wildly like:
>
> #include <linux/kernel.h>
> #include <linux/module.h>
>
> static int noop(void *dummy)
> {
> printk("current->mm = %p\n", current->mm);
> return 0;
> }
>
> static int test_init(void)
> {
> kernel_thread(noop, NULL, CLONE_KERNEL | SIGCHLD);
> return 0;
> }
>
> static void test_exit(void) {}
> module_init(test_init);
> module_exit(test_exit);
>
>
> In this circumstances, The thread created by kernel_thread has "current->mm != NULL".
>
> My question is:
> The new thread is truely kernel thread ? The usage of kernel_thread(...) like this is correct?
>
AFAIK the thread created like above is a true kernel thread but in
general practice what I saw and used that by creating thread from
init_module, the thread first call daemonize which actually drops the
mm related to thread and then through reparent_to_init it makes init
as a parent of the thread/process newly created. So after daemonize
call current->mm becomes NULL and when the scheduling is going to be
done the previous_process->mm will be used as the current->mm and
creating thread like above is correct.
--
Fawad Lateef
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]