[v3] net/ixgbe: fix link status
Checks
Commit Message
After ports reset, tx laser register will be reset. The link
status for 82599eb got from link status register was not correct.
Set tx laser disable when port resets.
ixgbe_flap_tx_laser_multispeed_fiber() can cause link status
change from down to up. This treatment should work after
port starts.
Fixes: 0408f47ba4d6 ("net/ixgbe: fix busy polling while fiber link update")
Cc: stable@dpdk.org
Signed-off-by: Lunyuan Cui <lunyuanx.cui@intel.com>
---
v3:
* Correct countermeasure
Don't delete ixgbe_dev_setup_link_alarm_handler().
v2:
* Change commit log
Add a log why I delete ixgbe_dev_setup_link_alarm_handler().
---
drivers/net/ixgbe/ixgbe_ethdev.c | 3 +++
1 file changed, 3 insertions(+)
Comments
On 11/18, Lunyuan Cui wrote:
>After ports reset, tx laser register will be reset. The link
>status for 82599eb got from link status register was not correct.
>Set tx laser disable when port resets.
Above message is unclear to me, what's the relation between tx laser register
and link status register? Better to describe what problem you've met, and how
your change fixes the issue?
>
>ixgbe_flap_tx_laser_multispeed_fiber() can cause link status
>change from down to up. This treatment should work after
>port starts.
Now the v3 doesn't touch ixgbe_flap_tx_laser_multispeed_fiber, you should
add explanation about the autotry_restart change you introduced.
Thanks,
Xiaolong
>
>Fixes: 0408f47ba4d6 ("net/ixgbe: fix busy polling while fiber link update")
>Cc: stable@dpdk.org
>
>Signed-off-by: Lunyuan Cui <lunyuanx.cui@intel.com>
>---
>v3:
>* Correct countermeasure
> Don't delete ixgbe_dev_setup_link_alarm_handler().
>
>v2:
>* Change commit log
> Add a log why I delete ixgbe_dev_setup_link_alarm_handler().
>---
> 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 8c1caac18..260484fbf 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.c
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>@@ -1188,6 +1188,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 */
>
> /*
>@@ -1298,6 +1299,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.17.1
>
@@ -1188,6 +1188,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 */
/*
@@ -1298,6 +1299,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));