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