[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220705011304.230622-1-shaozhengchao@huawei.com>
Date: Tue, 5 Jul 2022 09:13:04 +0800
From: Zhengchao Shao <shaozhengchao@...wei.com>
To: <intel-wired-lan@...ts.osuosl.org>, <netdev@...r.kernel.org>,
<linux-kernel@...r.kernel.org>, <bpf@...r.kernel.org>,
<davem@...emloft.net>, <edumazet@...gle.com>, <kuba@...nel.org>,
<pabeni@...hat.com>, <jesse.brandeburg@...el.com>,
<anthony.l.nguyen@...el.com>, <ast@...nel.org>,
<daniel@...earbox.net>, <hawk@...nel.org>,
<john.fastabend@...il.com>
CC: <weiyongjun1@...wei.com>, <yuehaibing@...wei.com>,
<shaozhengchao@...wei.com>
Subject: [PATCH net-next] i40e: i40e_reset_vf should return false if reset vf timeout
when trigger vf reset, but vf status is not ready, i40e_reset_vf
should not do other cleanup action. The current logic is always return
true. But it can't cover timeout scenary, and the looping in function
i40e_vc_reset_vf is useless.
Waiting for 120ms will cover most normal scenary. And the caller
function should try again when timeout or accept that resetting vf
failed.
Signed-off-by: Zhengchao Shao <shaozhengchao@...wei.com>
---
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
index d01fb592778c..42262009a00c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c
@@ -1564,11 +1564,17 @@ bool i40e_reset_vf(struct i40e_vf *vf, bool flr)
if (flr)
usleep_range(10000, 20000);
- if (!rsd)
- dev_err(&pf->pdev->dev, "VF reset check timeout on VF %d\n",
- vf->vf_id);
usleep_range(10000, 20000);
+ if (!rsd) {
+ reg = rd32(hw, I40E_VPGEN_VFRSTAT(vf->vf_id));
+ if (!(reg & I40E_VPGEN_VFRSTAT_VFRD_MASK)) {
+ dev_err(&pf->pdev->dev, "VF reset check timeout on VF %d\n",
+ vf->vf_id);
+ return false;
+ }
+ }
+
/* On initial reset, we don't have any queues to disable */
if (vf->lan_vsi_idx != 0)
i40e_vsi_stop_rings(pf->vsi[vf->lan_vsi_idx]);
--
2.17.1
Powered by blists - more mailing lists