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