spin_lock_irqsave and ISP interrupts on OMAP 3530
Russell King - ARM Linux
linux at arm.linux.org.uk
Thu Feb 10 12:53:55 EST 2011
On Thu, Feb 10, 2011 at 09:36:35AM -0800, Adam Wozniak wrote:
> [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);
> }
You probably didn't get a response because this is insufficient to guess
what could be going on. Try posting the entire code for this function.
More information about the linux-arm
mailing list