<p dir="ltr"><br>
On Jul 5, 2013 1:20 PM, &quot;Raj Ravi&quot; &lt;<a href="mailto:mekaviraj@gmail.com">mekaviraj@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; Hi,<br>
&gt; I have gone through the code.<br>
&gt;<br>
&gt; Please correct / provide your insights on my understanding.<br>
&gt; 1. There is no difference between local_irq_save and raw_local_irq_save with ARM architecture.  ?<br>
Yes,mostly there is no difference except in <br>
local_irq_save we enable some tracing options.<br>
&gt;<br>
&gt; 2. As per the below code,<br>
&gt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
&gt;  13 static inline unsigned long arch_local_irq_save(void)<br>
&gt;  14 {<br>
&gt;  15         unsigned long flags;<br>
&gt;  16 <br>
&gt;  17         asm volatile(<br>
&gt;  18                 &quot;       mrs     %0, cpsr        @ arch_local_irq_save\n&quot;<br>
&gt;  19                 &quot;       cpsid   i&quot;<br>
&gt;  20                 : &quot;=r&quot; (flags) : : &quot;memory&quot;, &quot;cc&quot;);<br>
&gt;  21         return flags;<br>
&gt;  22 }<br>
&gt; &lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;<br>
&gt; Here, Flags contain the result of PRIMASK register. before interrupts are disabled ?? <br>
Well that is assembly and my weakness<br>
 so my best answer would be that it just stores the previous state of interrupt status register and we restore it back when we call<br>
restore function.<br>
&gt;<br>
&gt; References:<br>
&gt; About CPSID instruction :<br>
&gt; <a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/BABHBAAB.html">http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/BABHBAAB.html</a><br>
&gt; CPSID i ; Disable all interrupts except NMI (set <a href="http://PRIMASK.PM">PRIMASK.PM</a>)<br>
&gt; Registers overview :<br>
&gt; <a href="http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/CHDBIBGJ.html">http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/CHDBIBGJ.html</a><br>
&gt; About PRIMASK register:<br>
&gt; <a href="http://infocenter.arm.com/help/topic/com.arm.doc.dui0662b/CHDBIBGJ.html#BABBBGEA">http://infocenter.arm.com/help/topic/com.arm.doc.dui0662b/CHDBIBGJ.html#BABBBGEA</a><br>
&gt; ARM GCC inline assembly:<br>
&gt; <a href="http://www.ethernut.de/en/documents/arm-inline-asm.html">http://www.ethernut.de/en/documents/arm-inline-asm.html</a><br>
&gt;<br>
&gt; Please provide your insights.<br>
&gt;<br>
&gt; Thanks !<br>
&gt; Kavi<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Jul 4, 2013 at 4:38 PM, anish singh &lt;<a href="mailto:anish198519851985@gmail.com">anish198519851985@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Jul 4, 2013 at 3:19 PM, Raj Ravi &lt;<a href="mailto:mekaviraj@gmail.com">mekaviraj@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Thanks Anish.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; As for  local_irq_save  and raw_local_irq_save, it seems<br>
&gt;&gt; &gt; local_irq_save - called at many different places while raw_local_irq_save is<br>
&gt;&gt; &gt; called in fewer places.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;                              local_irq_save - does not disable Hardware<br>
&gt;&gt; &gt; interrupts.<br>
&gt;&gt; &gt;     Whereas,raw_local_irq_save - does DISABLE hardware interrupts.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; As per code, raw_local_irq_save is related with timer interrupts.<br>
&gt;&gt; &gt; Please provide your insights on this.<br>
&gt;&gt; <a href="http://lxr.free-electrons.com/source/include/linux/irqflags.h#L61">http://lxr.free-electrons.com/source/include/linux/irqflags.h#L61</a><br>
&gt;&gt; read this please.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Also, in local_irq_save - how exactly disabling interrupts is achieved ( in<br>
&gt;&gt; &gt; spite of &quot; NOT DISABLING &quot; hardware interrupts) ?<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Thu, Jul 4, 2013 at 2:45 PM, anish singh &lt;<a href="mailto:anish198519851985@gmail.com">anish198519851985@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Thu, Jul 4, 2013 at 1:55 PM, Raj Ravi &lt;<a href="mailto:mekaviraj@gmail.com">mekaviraj@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt; &gt; Hi,<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Please let me know the difference between<br>
&gt;&gt; &gt;&gt; &gt; local_irq_save  and raw_local_irq_save ?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; did you check who calls this raw_local_irq_save?<br>
&gt;&gt; &gt;&gt; similarly who calls local_irq_save?<br>
&gt;&gt; &gt;&gt; finding out these will answer your questions<br>
&gt;&gt; &gt;&gt; &gt; At which situation one should use raw_local_irq_save?<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Also, I read &quot;flags&quot;  is where interrupt state is saved while disabling<br>
&gt;&gt; &gt;&gt; &gt; interrupts in local cpu (for local_irq_save).<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; What EXACTLY this  flags contains?  What do you mean by interrupt state<br>
&gt;&gt; &gt;&gt; &gt; here?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; interrupt state meaning: which all interrupts are enabled or disabled at<br>
&gt;&gt; &gt;&gt; this<br>
&gt;&gt; &gt;&gt; instant.If a particular interrupt was enabled at that instant then we<br>
&gt;&gt; &gt;&gt; don&#39;t<br>
&gt;&gt; &gt;&gt; do any thing with our locking mechanism which causes it be be disabled.<br>
&gt;&gt; &gt;&gt; What we are doing with those flags is nothing but maintaining the state.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Thanks!<br>
&gt;&gt; &gt;&gt; &gt; Kavi<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; &gt; Kernelnewbies mailing list<br>
&gt;&gt; &gt;&gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt; &gt;&gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;<br>
&gt;<br>
</p>