OSDN Git Service

net: phy: use phy_check_link_status in more places in the state machine
authorHeiner Kallweit <hkallweit1@gmail.com>
Wed, 7 Nov 2018 19:47:53 +0000 (20:47 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 8 Nov 2018 23:02:06 +0000 (15:02 -0800)
Use phy_check_link_status in more places in the state machine.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy.c

index 2268248..dd5bff9 100644 (file)
@@ -945,17 +945,13 @@ void phy_state_machine(struct work_struct *work)
 
                break;
        case PHY_NOLINK:
+       case PHY_RUNNING:
                if (!phy_polling_mode(phydev))
                        break;
-
-               err = phy_read_status(phydev);
-               if (err)
-                       break;
-
-               if (phydev->link) {
-                       phydev->state = PHY_RUNNING;
-                       phy_link_up(phydev);
-               }
+               /* fall through */
+       case PHY_CHANGELINK:
+       case PHY_RESUMING:
+               err = phy_check_link_status(phydev);
                break;
        case PHY_FORCING:
                err = genphy_update_link(phydev);
@@ -971,32 +967,6 @@ void phy_state_machine(struct work_struct *work)
                        phy_link_down(phydev, false);
                }
                break;
-       case PHY_RUNNING:
-               if (!phy_polling_mode(phydev))
-                       break;
-
-               err = phy_read_status(phydev);
-               if (err)
-                       break;
-
-               if (!phydev->link) {
-                       phydev->state = PHY_NOLINK;
-                       phy_link_down(phydev, true);
-               }
-               break;
-       case PHY_CHANGELINK:
-               err = phy_read_status(phydev);
-               if (err)
-                       break;
-
-               if (phydev->link) {
-                       phydev->state = PHY_RUNNING;
-                       phy_link_up(phydev);
-               } else {
-                       phydev->state = PHY_NOLINK;
-                       phy_link_down(phydev, true);
-               }
-               break;
        case PHY_HALTED:
                if (phydev->link) {
                        phydev->link = 0;
@@ -1004,19 +974,6 @@ void phy_state_machine(struct work_struct *work)
                        do_suspend = true;
                }
                break;
-       case PHY_RESUMING:
-               err = phy_read_status(phydev);
-               if (err)
-                       break;
-
-               if (phydev->link) {
-                       phydev->state = PHY_RUNNING;
-                       phy_link_up(phydev);
-               } else  {
-                       phydev->state = PHY_NOLINK;
-                       phy_link_down(phydev, true);
-               }
-               break;
        }
 
        mutex_unlock(&phydev->lock);