On Mon, Mar 7, 2011 at 9:42 AM, piyush moghe <pmkernel@xxxxxxxxx> wrote: > Hi Sudheer, > If you see there is a schedule_timeout function called with some timeout > so if you receive any signal ( handled by apm_event_handler ) before the > timeout value it will be woken up and if it receives no signal before > timeout value than scheduler will move this to RUNNABLE state again. > Regards, > Piyush > > On Thu, Mar 3, 2011 at 5:20 PM, <sudheer.divakaran@xxxxxxxxx> wrote: >> >> Hi, >> >> I had asked a similar question before, but I've some doubts regarding the >> correctness of the following code. Please see the following code snippet >> from the file linux-2.6.37/arch/x86/kernel/apm_32.c. This is the core >> function of apm thread. >> >> >> Question: >> Suppose the apm thread has just completed execution of the line 1442 and >> the scheduling happens for some reason, AFAIK, since the apm thread's state >> has been set to TASK_INTERRUPTIBLE, it will be removed from the run-queue. >> So there is a chance for the apm thread to remain suspended indefinitely as >> nobody is there to wakeup the apm thread, correct? >> >> I'm asking this because the same function has been given as an example in >> the following link and would like to confirm the accuracy of the example. >> >> http://www.linuxjournal.com/node/8144/print >> >> >> >> 1437 static void apm_mainloop(void) >> 1438 { >> 1439 DECLARE_WAITQUEUE(wait, current); >> 1440 >> 1441 add_wait_queue(&apm_waitqueue, &wait); >> 1442 set_current_state(TASK_INTERRUPTIBLE); >> 1443 for (;;) { >> 1444 schedule_timeout(APM_CHECK_TIMEOUT); >> 1445 if (kthread_should_stop()) >> 1446 break; >> 1447 /* >> 1448 * Ok, check all events, check for idle (and mark us sleeping >> 1449 * so as not to count towards the load average).. >> 1450 */ >> 1451 set_current_state(TASK_INTERRUPTIBLE); >> 1452 apm_event_handler(); >> 1453 } >> 1454 remove_wait_queue(&apm_waitqueue, &wait); >> 1455 } >> >> >> -- >> Thanks, >> Sudheer >> Hi, My question was the apm thread getting scheduled out of run queue at apm_32.c line no 1443. i.e., for(;;), just after executing the line 1442, i.e., set_current_state(TASK_INTERRUPTIBLE); In this case, AFAIK, schedule_timeout(APM_CHECK_TIMEOUT) will not be executed as the apm thread will not be returned to the run queue. CMIIW. -- Thanks Sudheer _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies