|
@@ -655,6 +655,10 @@ static void phy_change(struct work_struct *work)
|
|
|
struct phy_device *phydev =
|
|
|
container_of(work, struct phy_device, phy_queue);
|
|
|
|
|
|
+ if (phydev->drv->did_interrupt &&
|
|
|
+ !phydev->drv->did_interrupt(phydev))
|
|
|
+ goto ignore;
|
|
|
+
|
|
|
err = phy_disable_interrupts(phydev);
|
|
|
|
|
|
if (err)
|
|
@@ -681,6 +685,11 @@ static void phy_change(struct work_struct *work)
|
|
|
|
|
|
return;
|
|
|
|
|
|
+ignore:
|
|
|
+ atomic_dec(&phydev->irq_disable);
|
|
|
+ enable_irq(phydev->irq);
|
|
|
+ return;
|
|
|
+
|
|
|
irq_enable_err:
|
|
|
disable_irq(phydev->irq);
|
|
|
atomic_inc(&phydev->irq_disable);
|