Hi Ratheesh,<div><br></div><div>I ll give a try.<br><br><div class="gmail_quote">On Wed, Apr 17, 2013 at 9:43 PM, ratheesh kannoth <span dir="ltr">&lt;<a href="mailto:ratheesh.ksz@gmail.com" target="_blank">ratheesh.ksz@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I would like to understand on linux scheduler context. I have read a<br>
lot in websites and i could find<br>
contradictory statement. There are so many mailing list also ,but with<br>
less info. I would really appreciate<br>
if anybody could spend some time answering my question.<br>
<br>
1. Which context scheduler run ? ( process context or interrupt context ).<br></blockquote><div> </div><div>Process context. That is when preempt_count equal 0</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


2. scheduler is the guy  who picks up the next candidate to run.  if<br>
it gets interrupted by hardirq, what will happen ?<br></blockquote><div> </div><div>scheduler resumes from where it was stopped, after finishing hardirq handler(and softirq handlers if any)</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


3. if scheduler run in process context , how bottom half are scheduled ?<br></blockquote><div><br></div><div>Bottom halves(softirqs and tasklets) are not scheduled by scheduler.</div><div>ISR is executed in_irq() context or with preempt count added with HARDIRQ_OFFSET. </div>

<div>Local interrupts are disabled in_irq() context.</div><div><br></div><div>After completing ISR, irq_exit() function checks for any pending softirqs, if yes it invokes invoke_softirq() to service all pending softirqs with interrrupts enabled.</div>

<div>When softirqs runs, preempt count will be added with SOFTIRQ_OFFSET. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
4. In smp, schedule() function may be called  simultaneously. How it<br>
is handled ?<br></blockquote><div><br></div><div>Each core has its own runqueue which is a per_cpu variable.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


5. When a bottom half is interrupted  by hard irq, how softirq kernel<br>
thread saves the state and restart it later ? ...what i mean is , an<br>
   hardirq came and its isr executed. bottom half enabled and bottom<br>
half gets scheduled . Before bottom half is completed , next irq<br>
   came and it enables bottom half , and the new bottom half is<br>
scheduled ....So here , what will happen to old bottom half , will it<br>
again<br>
   run later ?<br></blockquote><div> </div><div>The old bottom half handler(which was preempted by irq) will be resumed after the hardirq isr.</div><div>Followed by the next bottom half.</div><div><br></div><div>Refer function  __do_softirq in kernel/softirq.c </div>

<div><br></div><div>Thanks,</div><div>Arun</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
<br>
Thanks,<br>
Ratheesh<br>
<br>
_______________________________________________<br>
Kernelnewbies mailing list<br>
<a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
<a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
</blockquote></div><br></div>