[dpdk-stable] [dpdk-dev] net/ixgbe:fix wrong link status
Ye Xiaolong
xiaolong.ye at intel.com
Mon Sep 2 11:00:03 CEST 2019
Hi, Xiao
On 09/02, Zhang Xiao wrote:
>The link status for 82599eb got from link status register was not correct,
So there is a HW issue, right?
Thanks,
Xiaolong
>check the enable/disable flag of tx laser when getting the link status,
>set the link status down if tx laser disabled since the tx laser flag
>could be set correctly when up/down the link status.
>
>Fixes: dc66e5fd01b9 ("net/ixgbe: improve link state check on VF")
>Cc: stable at dpdk.org
>
>Signed-off-by: Zhang Xiao <xiao.zhang at intel.com>
>---
> drivers/net/ixgbe/ixgbe_ethdev.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
>diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
>index 87d2ad0..fc06a1a 100644
>--- a/drivers/net/ixgbe/ixgbe_ethdev.c
>+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
>@@ -2864,6 +2864,7 @@ ixgbe_dev_set_link_up(struct rte_eth_dev *dev)
> } else {
> /* Turn on the laser */
> ixgbe_enable_tx_laser(hw);
>+ ixgbe_dev_link_update(dev, 0);
> }
>
> return 0;
>@@ -2894,6 +2895,7 @@ ixgbe_dev_set_link_down(struct rte_eth_dev *dev)
> } else {
> /* Turn off the laser */
> ixgbe_disable_tx_laser(hw);
>+ ixgbe_dev_link_update(dev, 0);
> }
>
> return 0;
>@@ -3967,6 +3969,7 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
> u32 speed = 0;
> int wait = 1;
> bool autoneg = false;
>+ u32 esdp_reg;
>
> memset(&link, 0, sizeof(link));
> link.link_status = ETH_LINK_DOWN;
>@@ -3999,6 +4002,10 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
> return rte_eth_linkstatus_set(dev, &link);
> }
>
>+ esdp_reg = IXGBE_READ_REG(hw, IXGBE_ESDP);
>+ if ((esdp_reg & IXGBE_ESDP_SDP3))
>+ link_up = 0;
>+
> if (link_up == 0) {
> intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;
> return rte_eth_linkstatus_set(dev, &link);
>--
>2.7.4
>
More information about the stable
mailing list