Patch "net: sparx5: fix error handling in sparx5_port_open()" 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: sparx5: fix error handling in sparx5_port_open()

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-sparx5-fix-error-handling-in-sparx5_port_open.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 807bd6d4e9320881f3fb4e347e6955b8e46fdd9c
Author: Liu Jian <liujian56@xxxxxxxxxx>
Date:   Thu Nov 17 20:59:18 2022 +0800

    net: sparx5: fix error handling in sparx5_port_open()
    
    [ Upstream commit 4305fe232b8aa59af3761adc9fe6b6aa40913960 ]
    
    If phylink_of_phy_connect() fails, the port should be disabled.
    If sparx5_serdes_set()/phy_power_on() fails, the port should be
    disabled and the phylink should be stopped and disconnected.
    
    Fixes: 946e7fd5053a ("net: sparx5: add port module support")
    Fixes: f3cad2611a77 ("net: sparx5: add hostmode with phylink support")
    Signed-off-by: Liu Jian <liujian56@xxxxxxxxxx>
    Tested-by: Bjarni Jonasson <bjarni.jonasson@xxxxxxxxxxxxx>
    Reviewed-by: Steen Hegelund <steen.hegelund@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221117125918.203997-1-liujian56@xxxxxxxxxx
    Signed-off-by: Paolo Abeni <pabeni@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c b/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
index cb68eaaac881..5c7b21ce64ed 100644
--- a/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
+++ b/drivers/net/ethernet/microchip/sparx5/sparx5_netdev.c
@@ -83,7 +83,7 @@ static int sparx5_port_open(struct net_device *ndev)
 	err = phylink_of_phy_connect(port->phylink, port->of_node, 0);
 	if (err) {
 		netdev_err(ndev, "Could not attach to PHY\n");
-		return err;
+		goto err_connect;
 	}
 
 	phylink_start(port->phylink);
@@ -95,10 +95,20 @@ static int sparx5_port_open(struct net_device *ndev)
 			err = sparx5_serdes_set(port->sparx5, port, &port->conf);
 		else
 			err = phy_power_on(port->serdes);
-		if (err)
+		if (err) {
 			netdev_err(ndev, "%s failed\n", __func__);
+			goto out_power;
+		}
 	}
 
+	return 0;
+
+out_power:
+	phylink_stop(port->phylink);
+	phylink_disconnect_phy(port->phylink);
+err_connect:
+	sparx5_port_enable(port, false);
+
 	return err;
 }
 



[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