When PF is put in no-carrier state, iavf VFs will switch to
"in carrier" state due to a link up + a link speed set to 0
(default value if no speed detected).

To be consistent with linux drivers on which PF and VFs are in
same carrier state, updates a link status of VF only if link is up
and speed is different from undefined.

Fixes: 48de41ca11f0 ("net/avf: enable link status update")

Signed-off-by: SteveX Yang <stevex.y...@intel.com>
---
 drivers/net/iavf/iavf_ethdev.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c
index f9dd5710c..ae508f2f0 100644
--- a/drivers/net/iavf/iavf_ethdev.c
+++ b/drivers/net/iavf/iavf_ethdev.c
@@ -620,8 +620,9 @@ iavf_dev_link_update(struct rte_eth_dev *dev,
        }
 
        new_link.link_duplex = ETH_LINK_FULL_DUPLEX;
-       new_link.link_status = vf->link_up ? ETH_LINK_UP :
-                                            ETH_LINK_DOWN;
+       new_link.link_status = (vf->link_up &&
+                               new_link.link_speed != ETH_SPEED_NUM_NONE)
+                               ? ETH_LINK_UP : ETH_LINK_DOWN;
        new_link.link_autoneg = !(dev->data->dev_conf.link_speeds &
                                ETH_LINK_SPEED_FIXED);
 
-- 
2.17.1

Reply via email to