Hi,<br><br><div class="gmail_quote">On Tue, Jul 3, 2012 at 9:24 AM, Parmenides <span dir="ltr">&lt;<a href="mailto:mobile.parmenides@gmail.com" target="_blank">mobile.parmenides@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">
Hi,<br>
<br>
    It is said that kernel can not be preempted in interrupt context<br>
and when it is in a critical section protected by a spin lock.<br>
<br>
1. For the spinlock case, it is easy to get if preemption is allowed<br>
in critical section, the purpose of protection provided by spinlock<br>
can not be achieved readily.<br>
<br>
2. For the interrupt context case, I think when processing interrupt,<br>
kernel can be preempted in principle. But, this really increases the<br>
interrupt processing time which further cause longer response time and<br>
data missing in device. Except that, is there any other reasons?<br>
<br>
3. Kernel is responsible for prohibiiting passive process switches,<br>
namely preemption, in the above cases. But, It seems that it does not<br>
take care of active process swtiches, namely yield. For example, some<br>
code in a critical section protected by a spinlock can invoke<br>
schedule() to switch process passively. Is this the case?<br>
<br></blockquote><div>Well one should not hold a spinlock and  call schedule(). If at all you want to yield,<br>release the spinlock and yield. Hope that answers your question.<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

_______________________________________________<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>