Patch "net: phy: fix duplex out of sync problem while changing settings" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net: phy: fix duplex out of sync problem while changing settings

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     net-phy-fix-duplex-out-of-sync-problem-while-changin.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit bb39bb618d05b229ea4e225a541361ee6db306bd
Author: Heiner Kallweit <hkallweit1@xxxxxxxxx>
Date:   Wed Nov 3 22:08:28 2021 +0100

    net: phy: fix duplex out of sync problem while changing settings
    
    [ Upstream commit a4db9055fdb9cf607775c66d39796caf6439ec92 ]
    
    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.
    
    [0] https://lore.kernel.org/netdev/a5c26ffd-4ee4-a5e6-4103-873208ce0dc5@xxxxxxxxxx/T/
    
    Fixes: 2bd229df5e2e ("net: phy: remove state PHY_FORCING")
    Reported-by: Zhang Changzhong <zhangchangzhong@xxxxxxxxxx>
    Tested-by: Zhang Changzhong <zhangchangzhong@xxxxxxxxxx>
    Signed-off-by: Heiner Kallweit <hkallweit1@xxxxxxxxx>
    Link: https://lore.kernel.org/r/7b8b9456-a93f-abbc-1dc5-a2c2542f932c@xxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index a3bfb156c83d7..beb2b66da1324 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;



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux