From b50b5cd69c12c56b94ee05ede840a6c43db86d22 Mon Sep 17 00:00:00 2001 From: Zhichao Zeng Date: Fri, 2 Jun 2023 10:38:22 +0800 Subject: [PATCH] net/iavf: add VF reset check In the current implementation, after application calls rte_eth_dev_reset, it has no way to know if reset has been completed, and if the virtual channel command is called before it is completed, it may cause the dev to be abnormal. To avoid this issue, an uncertain delay need to be added. This commit adds a VF reset check before the dev_reset to inform the application not to invoke any virtual channel commands, to avoid making the device to be abnormal. Suggested-by: Liang-Min Larry Wang Signed-off-by: Zhichao Zeng Signed-off-by: 0-day Robot --- drivers/net/iavf/iavf_ethdev.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/drivers/net/iavf/iavf_ethdev.c b/drivers/net/iavf/iavf_ethdev.c index f6d68403ce7..46895601412 100644 --- a/drivers/net/iavf/iavf_ethdev.c +++ b/drivers/net/iavf/iavf_ethdev.c @@ -2806,7 +2806,20 @@ static int iavf_dev_reset(struct rte_eth_dev *dev) { int ret; + struct iavf_hw *hw = IAVF_DEV_PRIVATE_TO_HW(dev->data->dev_private); + + /* + * Check whether the VF reset has been done and inform application, + * to avoid calling the virtual channel command, which may cause + * the device to be abnormal. + */ + ret = iavf_check_vf_reset_done(hw); + if (ret) { + PMD_DRV_LOG(ERR, "Wait too long for reset done!\n"); + return ret; + } + PMD_DRV_LOG(DEBUG, "Start dev_reset ...\n"); ret = iavf_dev_uninit(dev); if (ret) return ret;