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