From mboxrd@z Thu Jan 1 00:00:00 1970 From: vinc94@gmail.com (Vincenzo Scotti) Date: Sat, 21 Mar 2015 00:19:55 +0100 Subject: Kernel thread scheduling Message-ID: <20150320231955.GA5713@vinc94-desktop> To: kernelnewbies@lists.kernelnewbies.org List-Id: kernelnewbies.lists.kernelnewbies.org 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?