net: phy: fix issue with loading PHY driver w/o initramfs
authorHeiner Kallweit <hkallweit1@gmail.com>
Sat, 19 Jan 2019 09:30:21 +0000 (10:30 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 22 Jan 2019 22:44:26 +0000 (14:44 -0800)
It was reported that on a system with nfsboot and w/o initramfs network
fails because trying to load the PHY driver returns -ENOENT. Reason was
that due to missing initramfs the modprobe binary isn't available.
So we have to ignore error code -ENOENT.

Fixes: 13d0ab6750b2 ("net: phy: check return code when requesting PHY driver module")
Reported-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Tested-by: Krzysztof Kozlowski <krzk@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy_device.c

index b61db0a..d35038b 100644 (file)
@@ -564,10 +564,12 @@ static int phy_request_driver_module(struct phy_device *dev, int phy_id)
 
        ret = request_module(MDIO_MODULE_PREFIX MDIO_ID_FMT,
                             MDIO_ID_ARGS(phy_id));
-       /* we only check for failures in executing the usermode binary,
-        * not whether a PHY driver module exists for the PHY ID
+       /* We only check for failures in executing the usermode binary,
+        * not whether a PHY driver module exists for the PHY ID.
+        * Accept -ENOENT because this may occur in case no initramfs exists,
+        * then modprobe isn't available.
         */
-       if (IS_ENABLED(CONFIG_MODULES) && ret < 0) {
+       if (IS_ENABLED(CONFIG_MODULES) && ret < 0 && ret != -ENOENT) {
                phydev_err(dev, "error %d loading PHY driver module for ID 0x%08x\n",
                           ret, phy_id);
                return ret;