NMI has greater priority over spinlock, cause this is non maskable and NMI watchdog can be used for debugging spinlock deadlocks (CONFIG_DEBUG_SPINLOCK).<br><br>So we will hit NMI watchdog even if spinlock is acquired. <br>
<br><br><br><div class="gmail_quote">On Fri, Jan 7, 2011 at 11:57 AM, Tayade, Nilesh <span dir="ltr">&lt;<a href="mailto:Nilesh.Tayade@netscout.com">Nilesh.Tayade@netscout.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Hi,<br>
<br>
&gt; -----Original Message-----<br>
&gt; From: <a href="mailto:kernelnewbies-bounces@kernelnewbies.org">kernelnewbies-bounces@kernelnewbies.org</a> [mailto:<a href="mailto:kernelnewbies-">kernelnewbies-</a><br>
&gt; <a href="mailto:bounces@kernelnewbies.org">bounces@kernelnewbies.org</a>] On Behalf Of Dave Hylands<br>
&gt; Sent: Friday, January 07, 2011 10:59 AM<br>
&gt; To: Viral Mehta<br>
&gt; Cc: <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt; Subject: Re: spin_lock and scheduler confusion<br>
&gt;<br>
&gt; Hi Viral,<br>
&gt;<br>
&gt; On Wed, Jan 5, 2011 at 2:23 PM, Viral Mehta<br>
&gt; &lt;<a href="mailto:Viral.Mehta@lntinfotech.com">Viral.Mehta@lntinfotech.com</a>&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt; Hi ,<br>
&gt; &gt;<br>
&gt; &gt; I need your help to solve below confusion.<br>
&gt; &gt;<br>
[...]<br>
&gt;<br>
&gt; Note that you can&#39;t sleep while you hold a spinlock. You&#39;re not<br>
&gt; allowed to perform any type of blocking operations. If you&#39;re holding<br>
&gt; the spinlock for any significant length of time, then you&#39;re using the<br>
&gt; wrong design.<br>
&gt;<br>
&gt; &gt;     spin_lock_irqrestore();<br>
&gt; &gt; 3. One of the CPU core tries to execute this code and so acquires the<br>
&gt; lock.<br>
&gt; &gt; 4. Now, second core is also goes to execute same piece of code and so<br>
&gt; will<br>
[...]<br>
&gt;<br>
&gt; Not while it&#39;s holding the spinlock or waiting for the spinlock.<br>
&gt;<br>
&gt; &gt; Ever if timeslice is over for the current task ?<br>
&gt;<br>
&gt; The time tick interrupt is what determines when the timeslice is over.<br>
&gt; Since you have interrupts disabled, the timer interrupt can&#39;t happen.<br>
&gt;<br>
&gt; &gt; What if scheduler code is running on CPU core-3 and sees that<br>
&gt; &gt; timeslice for task running on CPU core-2 has expired ?<br>
&gt;<br>
&gt; Each core only considers the timeslices for its own core.<br>
&gt;<br>
&gt; &gt; I guess timeslice expire case is not as same as preemption. Or may be<br>
&gt; I am<br>
&gt; &gt; terribly wrong.<br>
&gt;<br>
&gt; You shouldn&#39;t be holding  a spinlock for periods of time approaching<br>
&gt; the length of a timeslice. The timer interrupt is what determines the<br>
&gt; end of a timeslice. No timer interrupt, no end of a timeslice.<br>
&gt; Preemption is also triggered by the timer interrupt, or by releasing a<br>
&gt; resource that a higher priority task is waiting for.<br>
<br>
May be my understanding is incorrect, but wouldn&#39;t we hit the NMI watchdog here(assuming we are running on x86/x86_64)?<br>
We have a system lockup for long time.<br>
<a href="http://lxr.linux.no/#linux+v2.6.37/Documentation/nmi_watchdog.txt" target="_blank">http://lxr.linux.no/#linux+v2.6.37/Documentation/nmi_watchdog.txt</a><br>
<br>
Could someone please clarify?<br>
&gt;<br>
&gt; Dave Hylands<br>
<font color="#888888"><br>
--<br>
Thanks,<br>
Nilesh<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>
</font></blockquote></div><br>