[PATCH 07/11] net/txgbe: fix to keep link down after device close

Jiawen Wu jiawenwu at trustnetic.com
Thu Sep 28 11:47:54 CEST 2023


When the port is closed, hardware is reset to power on. And
txgbe_dev_stop() is just returned 0 to avoid secondary calls,
so that the link led remains on. Fix this bug by adding to turn
off the copper/laser.

Fixes: e0d876ef6bbc ("net/txgbe: support device stop and close")
Cc: stable at dpdk.org

Signed-off-by: Jiawen Wu <jiawenwu at trustnetic.com>
---
 drivers/net/txgbe/txgbe_ethdev.c | 20 +++++++++++---------
 1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c
index e789e34c01..2dad820cb5 100644
--- a/drivers/net/txgbe/txgbe_ethdev.c
+++ b/drivers/net/txgbe/txgbe_ethdev.c
@@ -1929,7 +1929,7 @@ txgbe_dev_stop(struct rte_eth_dev *dev)
 	struct txgbe_tm_conf *tm_conf = TXGBE_DEV_TM_CONF(dev);
 
 	if (hw->adapter_stopped)
-		return 0;
+		goto out;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -1953,14 +1953,6 @@ txgbe_dev_stop(struct rte_eth_dev *dev)
 	for (vf = 0; vfinfo != NULL && vf < pci_dev->max_vfs; vf++)
 		vfinfo[vf].clear_to_send = false;
 
-	if (hw->phy.media_type == txgbe_media_type_copper) {
-		/* Turn off the copper */
-		hw->phy.set_phy_power(hw, false);
-	} else {
-		/* Turn off the laser */
-		hw->mac.disable_tx_laser(hw);
-	}
-
 	txgbe_dev_clear_queues(dev);
 
 	/* Clear stored conf */
@@ -1991,6 +1983,16 @@ txgbe_dev_stop(struct rte_eth_dev *dev)
 	dev->data->dev_started = 0;
 	hw->dev_start = false;
 
+out:
+	/* close phy to prevent reset in dev_close from restarting physical link */
+	if (hw->phy.media_type == txgbe_media_type_copper) {
+		/* Turn off the copper */
+		hw->phy.set_phy_power(hw, false);
+	} else {
+		/* Turn off the laser */
+		hw->mac.disable_tx_laser(hw);
+	}
+
 	return 0;
 }
 
-- 
2.27.0



More information about the stable mailing list