net/ixgbe: fix 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: dc66e5fd01
("net/ixgbe: improve link state check on VF")
Cc: stable@dpdk.org
Signed-off-by: Xiao Zhang <xiao.zhang@intel.com>
Reviewed-by: Wei Zhao <wei.zhao1@intel.com>
Acked-by: Xiaolong Ye <xiaolong.ye@intel.com>
This commit is contained in:
parent
a342d2772c
commit
1ca05831b9
@ -2912,6 +2912,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;
|
||||
@ -2942,6 +2943,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;
|
||||
@ -4116,6 +4118,7 @@ ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
|
||||
int link_up;
|
||||
int diag;
|
||||
int wait = 1;
|
||||
u32 esdp_reg;
|
||||
|
||||
memset(&link, 0, sizeof(link));
|
||||
link.link_status = ETH_LINK_DOWN;
|
||||
@ -4143,6 +4146,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) {
|
||||
if (ixgbe_get_media_type(hw) == ixgbe_media_type_fiber) {
|
||||
intr->flags |= IXGBE_FLAG_NEED_LINK_CONFIG;
|
||||
|
Loading…
Reference in New Issue
Block a user