[07/11] net/txgbe: fix to keep link down after device close
Checks
Commit Message
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@dpdk.org
Signed-off-by: Jiawen Wu <jiawenwu@trustnetic.com>
---
drivers/net/txgbe/txgbe_ethdev.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
@@ -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;
}