local_irq_save vs raw_local_irq_save

Raj Ravi mekaviraj at gmail.com
Fri Jul 5 03:50:45 EDT 2013


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.  ?


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

References:
About CPSID instruction :
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/BABHBAAB.html
CPSID i ; Disable all interrupts except NMI (set PRIMASK.PM)
Registers overview :
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0662b/CHDBIBGJ.html
About PRIMASK register:
http://infocenter.arm.com/help/topic/com.arm.doc.dui0662b/CHDBIBGJ.html#BABBBGEA
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 at gmail.com>wrote:

> On Thu, Jul 4, 2013 at 3:19 PM, Raj Ravi <mekaviraj at 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 at gmail.com
> >
> > wrote:
> >>
> >> On Thu, Jul 4, 2013 at 1:55 PM, Raj Ravi <mekaviraj at 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 at kernelnewbies.org
> >> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> >> >
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20130705/98e3b8cf/attachment.html 


More information about the Kernelnewbies mailing list