<br>Thanks Phillip its more clear now<br><br>This is the point i missed <br><i style="color:rgb(153,51,153)">You can see in the same source file that check_hung_task() is called<br>
by check_hung_uninterruptible_tasks(). But the function<br>check_hung_task() is only called for tasks which are in the state<br>TASK_UNINTERRUPTIBLE:<br></i><blockquote class="gmail_quote"><i style="color:rgb(51,102,255)"><span style="color:rgb(153,51,153)">
   if (t-&gt;state == TASK_UNINTERRUPTIBLE)</span><br style="color:rgb(153,51,153)"><span style="color:rgb(153,51,153)">
         check_hung_task(t, timeout)</span>;</i><br>
</blockquote>     <br>So if i changed the above check to the TASK_INTERRUPTIBLE then i will get <br>the hung_task_timeout for TASK_INTERRUPTIBLE task also.<br><br><i style="color:rgb(204,51,204)">&quot;Yes, your thread will be put back into the runqueue, if you mark it as<br>

TASK_INTERRUPTIBLE and a signal is delivered to your thread&quot;</i><br><br>I think in my case both the tasks wait in the wait_queue and never come to the TASK_RUNNING state.<br>In case of the TASK_INTERRUPTIBLE, it will get scheduled (or put to run queue) in two cases only:- <br>

1. If it receive any signal not before that  (we are not sending any signal to the task so it will remain in the wait_queue)<br>2. we call a wake_up () call. <br>otherwise there is no point in putting the task in run queue which has nothing to do. <br>

<br>Thanks, <br>Mani<br><br><br><div class="gmail_quote">On Tue, Apr 17, 2012 at 6:16 PM, Philipp Ittershagen <span dir="ltr">&lt;<a href="mailto:p.ittershagen@googlemail.com">p.ittershagen@googlemail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Mani,<br>
<div class="im"><br>
On Tue, Apr 17, 2012 at 1:35 PM, mani &lt;<a href="mailto:manishrma@gmail.com">manishrma@gmail.com</a>&gt; wrote:<br>
&gt; Thanks Philipp for the explanation and the link.<br>
&gt;<br>
&gt; But i Still have the same question:-<br>
&gt;<br>
&gt; Do scheduler schedule the tasks with TASK_INTERRUPTIBLE state ?<br>
&gt; As i know TASK_UNINTERRUPTIBLE &amp; TASK_INTERRUPTIBLE  both are not in the run<br>
&gt; queue<br>
&gt; and so both type of tasks should not being scheduled by the scheduler.<br>
&gt; If YES, then why it is needed to schedule task in TASK_INTERRUPTIBLE state ?<br>
<br>
</div>think of a signal as a software interrupt. If your thread is in the<br>
TASK_INTERRUPTIBLE state, it can be woken up by such software<br>
interrupt handlers in order to deliver the signal to your thread. Your<br>
thread will then be put into the runqueue ( and state will be<br>
TASK_RUNNING) and your wait_event_interruptible() call will return<br>
with the value -ERESTARTSYS. This is for you to be able to react to<br>
the delivered signal (you can read the active signals using<br>
signal_pending(current)). So, to answer your question: Yes, your<br>
thread will be put back into the runqueue, if you mark it as<br>
TASK_INTERRUPTIBLE and a signal is delivered to your thread. Your<br>
thread will _not_ be interrupted by software interrupts/signals when<br>
you mark it as TASK_UNINTERRUPTIBLE.<br>
<div class="im"><br>
<br>
&gt; What is the significance of the task-&gt;switch_count in the scheduler ?<br>
&gt; surely it got updated for the TASK_INTERRUPTIBLE task.<br>
&gt; [kernel/hung_task.c]check_hung_task()<br>
<br>
</div>You can see in the same source file that check_hung_task() is called<br>
by check_hung_uninterruptible_tasks(). But the function<br>
check_hung_task() is only called for tasks which are in the state<br>
TASK_UNINTERRUPTIBLE:<br>
<br>
   if (t-&gt;state == TASK_UNINTERRUPTIBLE)<br>
         check_hung_task(t, timeout);<br>
<br>
The t-&gt;last_switch_count counts the number of switches since the last<br>
call to check_hung_task() (the value is only updated there).<br>
<br>
I hope this answers your questions.<br>
<br>
<br>
Greetings,<br>
<br>
  Philipp<br>
</blockquote></div><br>