From c3f2fbff78cf5bd4f213b4f281251d401b09943f Mon Sep 17 00:00:00 2001 From: Lunyuan Cui Date: Mon, 18 Nov 2019 15:37:44 +0000 Subject: [PATCH] net/ixgbe: fix link status The link status for 82599eb got from link status register was not correct. Check the enable/disable flag of tx laser, set the link status down if tx laser disabled. Then, we can get correct status. But after port reset, tx laser register will be reset enable. Link status will always be up. So set tx laser disable when port resets. When hw->mac.autotry_restart is true, whether tx laser is disable or enable, it will be set enable in ixgbe_flap_tx_laser_multispeed_fiber(). hw->mac.autotry_restart can be set true in both port init and port start. Because we don't need this treatment before port starts, set hw->mac.autotry_restart false when port init. Fixes: 0408f47ba4d6 ("net/ixgbe: fix busy polling while fiber link update") Cc: stable@dpdk.org Signed-off-by: Lunyuan Cui Acked-by: Wenzhuo Lu --- drivers/net/ixgbe/ixgbe_ethdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 118bc74758..2c6fd0f131 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -1190,6 +1190,7 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) diag = ixgbe_bypass_init_hw(hw); #else diag = ixgbe_init_hw(hw); + hw->mac.autotry_restart = false; #endif /* RTE_LIBRTE_IXGBE_BYPASS */ /* @@ -1300,6 +1301,8 @@ eth_ixgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused) /* enable support intr */ ixgbe_enable_intr(eth_dev); + ixgbe_dev_set_link_down(eth_dev); + /* initialize filter info */ memset(filter_info, 0, sizeof(struct ixgbe_filter_info)); -- 2.20.1