local_irq_save not masking interrupts

Liu Dave-r63238 DaveLiu at freescale.com
Tue Sep 26 20:19:24 EST 2006


<snip>
> I'm having a strange problem with interrupts.  My platform is 
> the MPC832xEMDS and the BSP I'm using (from Freescale) uses 
> Linux-2.6.11.
> 
> In the code below I enter a critical section with 
> local_irq_save(), call request_irq() (from 
> mpc832xemds_phy_interrupt_enable) 4 times, then exit the 
> critical section using local_irq_restore.
> 
>      /* Enable interrupts from PHYs */
>      local_irq_save(flags);
>      for (i = 0; i < driver_data->num_phys; i++) {
>          struct atm_dev *dev = driver_data->dev_data[i]->dev;
>          printk("%s/%d\n",__FUNCTION__,__LINE__);
>          RETURN_ON_ERROR(mpc832xemds_phy_interrupt_enable(dev));
>      }
>      local_irq_restore(flags);
> 
> The problem is that I get an interrupt *before* exiting the 
> critical section.  This causes a problem for me, because the 
> interrupts are shared and the correct handler has not yet 
> been registered, so the interrupt never gets deasserted.
> 
> My question is: why is local_irq_save()/local_irq_restore() 
> not working?

Really? local_irq_save not working?
I don't believe it. 
Please check if exist any re-enable the interrupt in the critical
section.

-DAve



More information about the Linuxppc-embedded mailing list