<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7654.12">
<TITLE>scheduling -  more doubts</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->

<P><FONT SIZE=2>Hi,<BR>
<BR>
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.<BR>
<BR>
<BR>
Question:<BR>
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?<BR>
<BR>
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.<BR>
<BR>
<A HREF="http://www.linuxjournal.com/node/8144/print">http://www.linuxjournal.com/node/8144/print</A><BR>
<BR>
<BR>
<BR>
1437 static void apm_mainloop(void)<BR>
1438 {<BR>
1439&nbsp;&nbsp;&nbsp;&nbsp; DECLARE_WAITQUEUE(wait, current);<BR>
1440<BR>
1441&nbsp;&nbsp;&nbsp;&nbsp; add_wait_queue(&amp;apm_waitqueue, &amp;wait);<BR>
1442&nbsp;&nbsp;&nbsp;&nbsp; set_current_state(TASK_INTERRUPTIBLE);<BR>
1443&nbsp;&nbsp;&nbsp;&nbsp; for (;;) {<BR>
1444&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; schedule_timeout(APM_CHECK_TIMEOUT);<BR>
1445&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (kthread_should_stop())<BR>
1446&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<BR>
1447&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*<BR>
1448&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * Ok, check all events, check for idle (and mark us sleeping<BR>
1449&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * so as not to count towards the load average)..<BR>
1450&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<BR>
1451&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set_current_state(TASK_INTERRUPTIBLE);<BR>
1452&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apm_event_handler();<BR>
1453&nbsp;&nbsp;&nbsp;&nbsp; }<BR>
1454&nbsp;&nbsp;&nbsp;&nbsp; remove_wait_queue(&amp;apm_waitqueue, &amp;wait);<BR>
1455 }<BR>
<BR>
<BR>
--<BR>
Thanks,<BR>
Sudheer<BR>
<BR>
</FONT>
</P>

<P><strong><span style='font-size:10.0pt;font-family:
"Palatino Linotype","serif";color:green'> Please do not print this email unless it is absolutely necessary. </span></strong><span style='font-family:"Arial","sans-serif"'><o:p></o:p></span></p>


<p> The information contained in this electronic message and any attachments to this message are intended for the exclusive use of the addressee(s) and may contain proprietary, confidential or privileged information. If you are not the intended recipient, you should not disseminate, distribute or copy this e-mail. Please notify the sender immediately and destroy all copies of this message and any attachments. </p>

<p>WARNING: Computer viruses can be transmitted via email. The recipient should check this email and any attachments for the presence of viruses. The company accepts no liability for any damage caused by any virus transmitted by this email. </p>
<p>
www.wipro.com
</p>
</BODY>
</HTML>