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 ?? 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 }
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
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
Kavi
On Thu, Jul 4, 2013 at 4:38 PM, anish singh <anish198519851985@xxxxxxxxx> wrote:
On Thu, Jul 4, 2013 at 3:19 PM, Raj Ravi <mekaviraj@xxxxxxxxx> wrote:http://lxr.free-electrons.com/source/include/linux/irqflags.h#L61
> 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.
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@xxxxxxxxx>
> wrote:
>>
>> On Thu, Jul 4, 2013 at 1:55 PM, Raj Ravi <mekaviraj@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxx
>> > http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
>> >
>
>
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies