Hi Jeff,

kernel_thread just like daemon process. These are self monitoring process.


These process get scheduled by the kernel when their is any state change
from TASK_INTERRUPTIBLE to TASK_RUNNING or their is some condition that get 
full field.

If you don't schedule() the kernel thread state is not get updated by the 
scheduler.


Below example can help clear the concept.


http://lxr.free-electrons.com/source/drivers/vhost/vhost.c#L225


-Anand Moon


On Saturday, March 21, 2015 4:58 AM, Jeff Haran <[email protected]> wrote:
-----Original Message-----
From: [email protected] 
[mailto:[email protected]] On Behalf Of Vincenzo Scotti
Sent: Friday, March 20, 2015 4:20 PM
To: [email protected]
Subject: Kernel thread scheduling

Hello,
I am actually studying kernel threads, and I have some doubts about them.
Let's take for example this snippet of code

static int thread_function(void *data)
{
    while (!kthread_should_stop()) {
        schedule();
    }

    pr_err("Stopped");
    return 0;
}

This way it works just fine, and waits until I call kthread_stop on it.
But if I comment out that schedule() call, it just hangs my system when I load 
it (it is part of a module). I see that the loop-schedule-wakeup pattern is 
used among all the others kernel threads. But I don't get why I need to call 
the scheduler explicitly.
I know that the kernel is fully preemptible, and in my interpretation I thought 
that it could stop every running thread, even in kernel space, using a 
timer-based interrupt handler, to give cpu to other threads. Doesn't this 
pattern resemble a voluntary preemption model?

Where am I wrong?

Are you sure your kernel is configured with kernel preemption on? It is a 
configurable option. Grep for PREEMPT in your .config file.

Jeff


_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

_______________________________________________
Kernelnewbies mailing list
[email protected]
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to