summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>2023-09-14 17:35:41 +0200
committerDavid S. Miller <davem@davemloft.net>2023-09-17 15:31:23 +0200
commitea5968cd7d6e6f237cfc6d00aa29ff1dc9230b2f (patch)
treeddf139ec477223205c1105aa58494ea23240c11a /drivers
parentnet: phy: call phy_error_precise() while holding the lock (diff)
downloadlinux-ea5968cd7d6e6f237cfc6d00aa29ff1dc9230b2f.tar.xz
linux-ea5968cd7d6e6f237cfc6d00aa29ff1dc9230b2f.zip
net: phy: move call to start aneg
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>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/phy/phy.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 990d387b31bd..5bb33af2a4cb 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -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;