Message ID | 7b8b9456-a93f-abbc-1dc5-a2c2542f932c@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Commit | a4db9055fdb9cf607775c66d39796caf6439ec92 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: phy: fix duplex out of sync problem while changing settings | expand |
Hello: This patch was applied to netdev/net.git (master) by Jakub Kicinski <kuba@kernel.org>: On Wed, 3 Nov 2021 22:08:28 +0100 you wrote: > As reported by Zhang there's a small issue if in forced mode the duplex > mode changes with the link staying up [0]. In this case the MAC isn't > notified about the change. > > The proposed patch relies on the phylib state machine and ignores the > fact that there are drivers that uses phylib but not the phylib state > machine. So let's don't change the behavior for such drivers and fix > it w/o re-adding state PHY_FORCING for the case that phylib state > machine is used. > > [...] Here is the summary with links: - [net] net: phy: fix duplex out of sync problem while changing settings https://git.kernel.org/netdev/net/c/a4db9055fdb9 You are awesome, thank you!
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index a3bfb156c..beb2b66da 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -815,7 +815,12 @@ int phy_ethtool_ksettings_set(struct phy_device *phydev, phydev->mdix_ctrl = cmd->base.eth_tp_mdix_ctrl; /* Restart the PHY */ - _phy_start_aneg(phydev); + if (phy_is_started(phydev)) { + phydev->state = PHY_UP; + phy_trigger_machine(phydev); + } else { + _phy_start_aneg(phydev); + } mutex_unlock(&phydev->lock); return 0;