Liu Dave-r63238 wrote: > <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
Well, mpc832xemds_phy_interrupt_enable() does nothing except call request_irq(,,SA_SHIRQ,,). I suspect that request_irq() is somehow reenabling interrupts, but I can't see where it might be doing so. Is this a possible? Alex _______________________________________________ Linuxppc-embedded mailing list Linuxppc-embedded@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-embedded