[dpdk-stable] patch 'net/i40e: fix PF notify when VF is not up' has been queued to LTS release 16.11.3

Li, Xiaoyun xiaoyun.li at intel.com
Wed Aug 9 05:53:36 CEST 2017


Hi, this patch will cause DPDK PF failing to send messages to kernel VF, and can't get kernel interface in VM.
So I will rework on this issue.

-----Original Message-----
From: Yuanhan Liu [mailto:yliu at fridaylinux.org] 
Sent: Wednesday, August 9, 2017 11:44
To: Li, Xiaoyun <xiaoyun.li at intel.com>
Cc: Wu, Jingjing <jingjing.wu at intel.com>; dpdk stable <stable at dpdk.org>; Yuanhan Liu <yliu at fridaylinux.org>
Subject: patch 'net/i40e: fix PF notify when VF is not up' has been queued to LTS release 16.11.3

Hi,

FYI, your patch has been queued to LTS release 16.11.3

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 08/11/17. So please shout if anyone has objections.

Thanks.

	--yliu

---
>From a01cf403496049b6991eedc7084279b3bd43b431 Mon Sep 17 00:00:00 2001
From: Xiaoyun Li <xiaoyun.li at intel.com>
Date: Fri, 28 Jul 2017 23:48:11 +0800
Subject: [PATCH] net/i40e: fix PF notify when VF is not up

[ upstream commit 035a8cf88f010c82de3040c895c801ce0849b065 ]

This patch stops PF from sending messages to inactive VF and modifies VF state to active when VF reset is completed.

Fixes: 4861cde46116 ("i40e: new poll mode driver")

Signed-off-by: Xiaoyun Li <xiaoyun.li at intel.com>
Acked-by: Jingjing Wu <jingjing.wu at intel.com>
---
 drivers/net/i40e/i40e_pf.c | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/drivers/net/i40e/i40e_pf.c b/drivers/net/i40e/i40e_pf.c index b36d901..978b82b 100644
--- a/drivers/net/i40e/i40e_pf.c
+++ b/drivers/net/i40e/i40e_pf.c
@@ -151,22 +151,22 @@ i40e_pf_host_vf_reset(struct i40e_pf_vf *vf, bool do_hw_reset)
 		val |= I40E_VPGEN_VFRTRIG_VFSWR_MASK;
 		I40E_WRITE_REG(hw, I40E_VPGEN_VFRTRIG(vf_id), val);
 		I40E_WRITE_FLUSH(hw);
-	}
 
 #define VFRESET_MAX_WAIT_CNT 100
-	/* Wait until VF reset is done */
-	for (i = 0; i < VFRESET_MAX_WAIT_CNT; i++) {
-		rte_delay_us(10);
-		val = I40E_READ_REG(hw, I40E_VPGEN_VFRSTAT(vf_id));
-		if (val & I40E_VPGEN_VFRSTAT_VFRD_MASK)
-			break;
-	}
+		/* Wait until VF reset is done */
+		for (i = 0; i < VFRESET_MAX_WAIT_CNT; i++) {
+			rte_delay_us(10);
+			val = I40E_READ_REG(hw, I40E_VPGEN_VFRSTAT(vf_id));
+			if (val & I40E_VPGEN_VFRSTAT_VFRD_MASK)
+				break;
+		}
 
-	if (i >= VFRESET_MAX_WAIT_CNT) {
-		PMD_DRV_LOG(ERR, "VF reset timeout");
-		return -ETIMEDOUT;
+		if (i >= VFRESET_MAX_WAIT_CNT) {
+			PMD_DRV_LOG(ERR, "VF reset timeout");
+			return -ETIMEDOUT;
+		}
+		vf->state = I40E_VF_ACTIVE;
 	}
-
 	/* This is not first time to do reset, do cleanup job first */
 	if (vf->vsi) {
 		/* Disable queues */
@@ -261,7 +261,10 @@ i40e_pf_host_send_msg_to_vf(struct i40e_pf_vf *vf,  {
 	struct i40e_hw *hw = I40E_PF_TO_HW(vf->pf);
 	uint16_t abs_vf_id = hw->func_caps.vf_base_id + vf->vf_idx;
-	int ret;
+	int ret = I40E_ERR_ADMIN_QUEUE_ERROR;
+
+	if (vf->state == I40E_VF_INACTIVE)
+		return ret;
 
 	ret = i40e_aq_send_msg_to_vf(hw, abs_vf_id, opcode, retval,
 						msg, msglen, NULL);
--
2.7.4



More information about the stable mailing list