optimize link update process.
Signed-off-by: Junlong Wang <wang.junlong1@zte.com.cn>
---
drivers/net/zxdh/zxdh_ethdev_ops.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/drivers/net/zxdh/zxdh_ethdev_ops.c b/drivers/net/zxdh/zxdh_ethdev_ops.c
index 6ed6c6cfdc..bb9d291181 100644
--- a/drivers/net/zxdh/zxdh_ethdev_ops.c
+++ b/drivers/net/zxdh/zxdh_ethdev_ops.c
@@ -193,6 +193,7 @@ zxdh_link_info_get(struct rte_eth_dev *dev, struct rte_eth_link *link)
return -1;
}
link->link_speed = reply_info.reply_body.link_msg.speed;
+ link->link_autoneg = reply_info.reply_body.link_msg.autoneg;
hw->speed_mode = reply_info.reply_body.link_msg.speed_modes;
if ((reply_info.reply_body.link_msg.duplex & RTE_ETH_LINK_FULL_DUPLEX) ==
RTE_ETH_LINK_FULL_DUPLEX)
@@ -263,13 +264,22 @@ int32_t zxdh_dev_link_update(struct rte_eth_dev *dev, int32_t wait_to_complete _
return ret;
}
link.link_status &= hw->admin_status;
- if (link.link_status == RTE_ETH_LINK_DOWN)
- link.link_speed = RTE_ETH_SPEED_NUM_UNKNOWN;
-
- ret = zxdh_config_port_status(dev, link.link_status);
- if (ret != 0) {
- PMD_DRV_LOG(ERR, "set port attr %d failed", link.link_status);
- return ret;
+ if (link.link_status == RTE_ETH_LINK_DOWN) {
+ PMD_DRV_LOG(DEBUG, "dev link status is down.");
+ goto link_down;
+ }
+ goto out;
+
+link_down:
+ link.link_status = RTE_ETH_LINK_DOWN;
+ link.link_speed = RTE_ETH_SPEED_NUM_UNKNOWN;
+out:
+ if (link.link_status != dev->data->dev_link.link_status) {
+ ret = zxdh_config_port_status(dev, link.link_status);
+ if (ret != 0) {
+ PMD_DRV_LOG(ERR, "set port attr %d failed", link.link_status);
+ return ret;
+ }
}
return rte_eth_linkstatus_set(dev, &link);
}
--
2.27.0