spin_lock_irqsave and ISP interrupts on OMAP 3530

Adam Wozniak awozniak at irobot.com
Thu Feb 10 12:36:35 EST 2011


[Apologies, I tried this email a week ago on the linux-omap list with 
zero responses, so I thought I should try here.]

I'm hoping I'm just not understanding something and this isn't as broke 
as I fear it is.

I'm using the ISP on an OMAP3530, linux 2.6.32.  I've got some kernel 
code I want to lock in both the process context and the ISP interrupt 
context, so I'm using a spinlock.  As I understand it, locking the 
spinlock should disable all interrupts.  However, I'm still seeing the 
ISP interrupt happen when I've got the spinlock locked in the process 
context.

i.e. somewhere I've got the code below, and my Warning is tripping.  Is 
this broken, or am I not understanding something?

int am_i_locked = 0;
spinlock_t my_spinlock = SPIN_LOCK_UNLOCKED;

void foo(void) {
     /* function could be called from process context, or could be 
called from omap34xx_isp_isr (interrupt context) */
     unsigned long flags;
     spin_lock_irqsave(&my_spinlock, flags);
     WARN_ON(am_i_locked);
     am_i_locked++;

     /* do some stuff */

     am_i_locked--;
     spin_unlock_irqrestore(&my_spinlock, flags);
}



More information about the linux-arm mailing list