]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: phy: smsc: Cope with hot-removal in interrupt handler
authorLukas Wunner <lukas@wunner.de>
Thu, 12 May 2022 08:42:07 +0000 (10:42 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 13 May 2022 10:35:46 +0000 (11:35 +0100)
If reading the Interrupt Source Flag register fails with -ENODEV, then
the PHY has been hot-removed and the correct response is to bail out
instead of throwing a WARN splat and attempting to suspend the PHY.
The PHY should be stopped in due course anyway as the kernel
asynchronously tears down the device.

Tested-by: Oleksij Rempel <o.rempel@pengutronix.de> # LAN9514/9512/9500
Tested-by: Ferry Toth <fntoth@gmail.com> # LAN9514
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/smsc.c

index e0eadea4b4b5bb801d22181f3784f09edd06a7d9..1b54684b68a076ebeb03ea8f67c4e6c00ae13e40 100644 (file)
@@ -91,7 +91,9 @@ static irqreturn_t smsc_phy_handle_interrupt(struct phy_device *phydev)
 
        irq_status = phy_read(phydev, MII_LAN83C185_ISF);
        if (irq_status < 0) {
-               phy_error(phydev);
+               if (irq_status != -ENODEV)
+                       phy_error(phydev);
+
                return IRQ_NONE;
        }