<div dir="ltr">thank Jeff for your time to read and reply my mail.<div><br></div><div>One more ques,</div><div>                         are you aware of  anything in linux which can be used to check  safely, if a particular piece of code is not running in process context, and therefore can not be preempted or context switched?</div>
<div>For sure, I am going to be much careful to use in_interrupt/in_irq macros in future.</div><div><br></div><div>thanks in advance.</div><div>Vishwas S</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Tue, Jul 29, 2014 at 12:30 AM, Jeff Haran <span dir="ltr">&lt;<a href="mailto:Jeff.Haran@citrix.com" target="_blank">Jeff.Haran@citrix.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">








<div lang="EN-US" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><font face="Tahoma"><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;font-weight:bold">From:</span></font></b><font face="Tahoma"><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">
 Vishwas Srivastava [mailto:<a href="mailto:vishu.kernel@gmail.com" target="_blank">vishu.kernel@gmail.com</a>] <br>
<b><span style="font-weight:bold">Sent:</span></b> Monday, July 28, 2014 10:29 AM<br>
<b><span style="font-weight:bold">To:</span></b> Jeff Haran; <a href="mailto:kernelnewbies@kernelnewbies.org" target="_blank">kernelnewbies@kernelnewbies.org</a></span></font></p><div class=""><font face="Tahoma"><br>
<b><span style="font-weight:bold">Subject:</span></b> Re: Kernelnewbies Digest, Vol 44, Issue 51<u></u><u></u></font></div><p></p>
</div>
</div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"><u></u> <u></u></span></font></p>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">Hi Jeff,<u></u><u></u></span></font></p><div class="">
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">           yes, your guess is correct. The place i checked  in_interrupt() was a region before which a call to spin_lock_bh() was made.<u></u><u></u></span></font></p>

</div>
</div><div><div class="">
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">So what is the rule?<u></u><u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
</div><p class="MsoNormal" style="margin-left:5.25pt"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Vishwas,<u></u><u></u></span></font></p>

<p class="MsoNormal" style="margin-left:5.25pt"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
<p class="MsoNormal" style="margin-left:5.25pt"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">My take from this was that the
<span>in_interrupt</span>() macro is perhaps inappropriately named. It doesn’t tell you
<span>you</span> are in an interrupt handler. It’s interpreting the bits of the
<span>thread_info</span> <span>preempt_count</span> field and those bits can be set for a variety of reasons. I’ve found it’s not productive to try to impose rules on it after the fact. Not that different than for instance the
<span>spin_lock</span>() function. If you just read that function name, “<span>spin_lock</span>()”, you might come to the conclusion that it implies there is always some sort of spin loop going on. And that’s true in many cases,
 but on a UP system with kernel pre-emption disable, <span>spin_lock</span>() does nothing (at least it didn’t do anything the last time I look at it closely, that might have changed since). The code does what it does and one must struggle through
 reading it in order to figure out how to use it (and hope that you’ve come to the right conclusions and haven’t missed some</span></font>
<font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">subtlety and that it doesn’t change too much in the future). Not the most efficient state of
 affairs IMHO, but that’s them apples.<u></u><u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
</div><div class="">
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">if in_interrupt() return me true then that is the region of the code which can not be context switched or if i am out of interrupt (in kernel thread) and have called spin_lock_bh(),
 then this macro is not reliable to safely find out if the region below this can not be context switched?<u></u><u></u></span></font></p>
</div>
</div><div><div class="">
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">If that is the case, then perhaps only the &quot;false&quot; return of the macro
<span>in_interrupt</span> is reliable.<u></u><u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
</div><p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">“Reliable” in the sense that what it does sort of matches its mnemonics
 in the case where it returns false. But when it returns true, it means something else.<u></u><u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Jeff Haran<u></u><u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"><u></u> <u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">thanks,<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">Vishwas S<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" color="#1f497d" face="Times New Roman"><span style="font-size:12.0pt;color:#1f497d"><u></u> <u></u></span></font></p>
</div>
</div><div class="">
<div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">On Mon, Jul 28, 2014 at 9:54 PM, Jeff Haran &lt;<a href="mailto:Jeff.Haran@citrix.com" target="_blank">Jeff.Haran@citrix.com</a>&gt; wrote:<u></u><u></u></span></font></p>

<div>
<div>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span></font><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt">
<div>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><font face="Tahoma"><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;;font-weight:bold">From:</span></font></b><font face="Tahoma"><span style="font-size:10.0pt;font-family:&quot;Tahoma&quot;,&quot;sans-serif&quot;">
<a href="mailto:kernelnewbies-bounces@kernelnewbies.org" target="_blank">kernelnewbies-bounces@kernelnewbies.org</a> [mailto:<a href="mailto:kernelnewbies-bounces@kernelnewbies.org" target="_blank">kernelnewbies-bounces@kernelnewbies.org</a>]
<b><span style="font-weight:bold">On Behalf Of </span></b>Vishwas Srivastava<br>
<b><span style="font-weight:bold">Sent:</span></b> Saturday, July 26, 2014 10:07 AM<br>
<b><span style="font-weight:bold">To:</span></b> <a href="mailto:kernelnewbies@kernelnewbies.org" target="_blank">
kernelnewbies@kernelnewbies.org</a><br>
<b><span style="font-weight:bold">Subject:</span></b> Re: Kernelnewbies Digest, Vol 44, Issue 51</span></font><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
<div>
<div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">Hi All,<u></u><u></u></span></font></p>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">          I have a doubt regarding the  threaded interrupt handing mechanism.<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">what is the kernel context of execution while executing interrupt thread.<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">if i check for macro<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">in_irq() or in_interrupt() withing handler thread , my understanding is that they both are going to return me
 0 (since we are in kernel thread),<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">as threads runs in process context.<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">Also, since they are &quot;kernel threads&quot;, they must be schedulable enteties.<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">what conceptually deviated me from my understanding is one of the driver which had a threaded interrupt mechanism
 and when i checked<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
</div>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">in_interrupt() macro, it returned me a non zero value so i am a bit confused.<u></u><u></u></span></font></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span></font><u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">By any chance had you disabled interrupts or bottom
 halves when you made this call to in_interrupt()?</span></font><u></u><u></u></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">The reason I ask is the last time I looked into this
 the conclusion I came to was that in_interrupt() would return non-zero under a couple of different conditions; 1) the code was really executing in either a bottom half or IRQ context, or; 2) the code was executing in process context but had previously disabled
 interrupts or bottom halves, e.g. a call to spin_lock_bh() or anything else that disables bottom halves. At the time I was trying to figure out how to tell for sure whether or not a given function was being called from a bottom half (as opposed to executing
 in process context with bottom halves disabled) and from what I could see at the time, there was no way to distinguish the two conditions. Disclaimer: I’m no expert on this stuff, just reporting what I concluded at the time from eyeballing the code. Perhaps
 I missed something.</span></font><u></u><u></u></p>
<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d"> </span></font><font color="#888888"><span style="color:#888888"><u></u><u></u></span></font></p>

<p class="MsoNormal"><font color="#1f497d" face="Calibri"><span style="font-size:11.0pt;font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;color:#1f497d">Jeff Haran</span></font><font color="#888888"><span style="color:#888888"><u></u><u></u></span></font></p>

</div>
<div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">thanks in advance.<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt">Vishwas S<u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
<div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"> <u></u><u></u></span></font></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="MsoNormal"><font size="3" face="Times New Roman"><span style="font-size:12.0pt"><u></u> <u></u></span></font></p>
</div>
</div></div>
</div>
</div>

</blockquote></div><br></div>