Messages in this thread | | | Date | Fri, 23 Apr 2021 16:42:29 +0300 | From | Vladimir Oltean <> | Subject | Re: [PATCH] phy: nxp-c45-tja11xx: add interrupt support |
| |
On Fri, Apr 23, 2021 at 03:07:51PM +0200, Andrew Lunn wrote: > > +static irqreturn_t nxp_c45_handle_interrupt(struct phy_device *phydev) > > +{ > > + irqreturn_t ret = IRQ_NONE; > > + int irq; > > + > > + irq = phy_read_mmd(phydev, MDIO_MMD_VEND1, VEND1_PHY_IRQ_STATUS); > > + if (irq & PHY_IRQ_LINK_EVENT) { > > + phy_trigger_machine(phydev); > > + phy_write_mmd(phydev, MDIO_MMD_VEND1, VEND1_PHY_IRQ_ACK, > > + PHY_IRQ_LINK_EVENT); > > The ordering here is interesting. Could phy_trigger_machine() cause a > second interrupt? Which you then clear without acting upon before > exiting the interrupt handler? I think you should ACK the interrupt > before calling phy_trigger_machine().
I thought that the irqchip driver keeps the interrupt line disabled until the handler finishes, and that recursive interrupts aren't a thing in Linux? Even with threaded interrupts, I thought this is what IRQF_ONESHOT deals with.
| |