Reviewed-by: Wei Zhao <wei.zh...@intel.com>

> -----Original Message-----
> From: Zhang, Xiao
> Sent: Monday, September 2, 2019 7:52 PM
> To: dev@dpdk.org
> Cc: Zhao1, Wei <wei.zh...@intel.com>; Zhang, Xiao <xiao.zh...@intel.com>;
> sta...@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: sta...@dpdk.org
> 
> Signed-off-by: Zhang Xiao <xiao.zh...@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

Reply via email to