[dpdk-dev] net/ixgbe:fix wrong link status

Zhao1, Wei wei.zhao1 at intel.com
Mon Sep 2 05:28:09 CEST 2019


Reviewed-by: Wei Zhao <wei.zhao1 at intel.com>

> -----Original Message-----
> From: Zhang, Xiao
> Sent: Monday, September 2, 2019 7:52 PM
> To: dev at dpdk.org
> Cc: Zhao1, Wei <wei.zhao1 at intel.com>; Zhang, Xiao <xiao.zhang at intel.com>;
> stable at dpdk.org
> Subject: net/ixgbe:fix wrong link status
> 
> The link status for 82599eb got from link status register was not correct, 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 dev mailing list