diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index a3649e6b3a47..7c0674736347 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -1629,7 +1629,16 @@ exit_unlock: */ static int lan78xx_phy_int_ack(struct lan78xx_net *dev) { - return lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); + struct phy_device *phydev = dev->net->phydev; + int ret = lan78xx_write_reg(dev, INT_STS, INT_STS_PHY_INT_); + + if (unlikely(ret < 0)) + return ret; + + /* Acknowledge any pending PHY interrupt, lest it be the last */ + phy_read(phydev, LAN88XX_INT_STS); + + return 0; } /* some work can't be done in tasklets, so we use keventd