net: phy: move call to start aneg
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Thu, 14 Sep 2023 15:35:41 +0000 (16:35 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 17 Sep 2023 13:31:23 +0000 (14:31 +0100)
Move the call to start auto-negotiation inside the lock in the PHYLIB
state machine, calling the locked variant _phy_start_aneg(). This
avoids unnecessarily releasing and re-acquiring the lock.

Tested-by: Jijie Shao <shaojijie@huawei.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy.c

index 990d387b31bdcbfb9ef0a1b6a6f3c1ff254121eb..5bb33af2a4cbf5b4e76afb471470584126811bbf 100644 (file)
@@ -1489,14 +1489,15 @@ void phy_state_machine(struct work_struct *work)
                break;
        }
 
+       if (needs_aneg) {
+               err = _phy_start_aneg(phydev);
+               func = &_phy_start_aneg;
+       }
+
        mutex_unlock(&phydev->lock);
 
-       if (needs_aneg) {
-               err = phy_start_aneg(phydev);
-               func = &phy_start_aneg;
-       } else if (do_suspend) {
+       if (do_suspend)
                phy_suspend(phydev);
-       }
 
        if (err == -ENODEV)
                return;