DPDK patches and discussions
 help / color / mirror / Atom feed
From: Xiao Zhang <xiao.zhang@intel.com>
To: dev@dpdk.org
Cc: xiaolong.ye@intel.com, Xiao Zhang <xiao.zhang@intel.com>,
	stable@dpdk.org
Subject: [dpdk-dev] [v6] net/i40e: fix vf runtime queues rss config
Date: Wed, 14 Aug 2019 06:17:45 +0800	[thread overview]
Message-ID: <1565734665-72404-1-git-send-email-xiao.zhang@intel.com> (raw)
In-Reply-To: <1565692851-36962-1-git-send-email-xiao.zhang@intel.com>

I40evf queue can not work properly with kernel pf driver for X722 vf. 
Eg. when configure 8 queues pair, only 4 queues can receive packets, 
and half packets will be lost if using 2 queues pair.
This issue is caused by misconfiguration of look up table, the original
code of LUT configuration did not work for X722 vf, use aq command to 
setup the LUT to make it work properly.

Fixes: cea7a51c1750 ("i40evf: support RSS")
Cc: stable@dpdk.org

Signed-off-by: Xiao Zhang <xiao.zhang@intel.com>
---
v6 update commit message
v5 fix compile issue
v4 move local variable definition to the begin of the function
v3 move LUT configuration in to i40evf_configure_rss
v2 change for loop format to avoid build patch issue
---
 drivers/net/i40e/i40e_ethdev_vf.c | 32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index 308fb98..c77b30c 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -2598,7 +2598,10 @@ i40evf_config_rss(struct i40e_vf *vf)
 	struct i40e_hw *hw = I40E_VF_TO_HW(vf);
 	struct rte_eth_rss_conf rss_conf;
 	uint32_t i, j, lut = 0, nb_q = (I40E_VFQF_HLUT_MAX_INDEX + 1) * 4;
+	uint32_t rss_lut_size = (I40E_VFQF_HLUT1_MAX_INDEX + 1) * 4;
 	uint16_t num;
+	uint8_t *lut_info;
+	int ret;
 
 	if (vf->dev_data->dev_conf.rxmode.mq_mode != ETH_MQ_RX_RSS) {
 		i40evf_disable_rss(vf);
@@ -2608,12 +2611,29 @@ i40evf_config_rss(struct i40e_vf *vf)
 
 	num = RTE_MIN(vf->dev_data->nb_rx_queues, I40E_MAX_QP_NUM_PER_VF);
 	/* Fill out the look up table */
-	for (i = 0, j = 0; i < nb_q; i++, j++) {
-		if (j >= num)
-			j = 0;
-		lut = (lut << 8) | j;
-		if ((i & 3) == 3)
-			I40E_WRITE_REG(hw, I40E_VFQF_HLUT(i >> 2), lut);
+	if (!(vf->flags & I40E_FLAG_RSS_AQ_CAPABLE)) {
+		for (i = 0, j = 0; i < nb_q; i++, j++) {
+			if (j >= num)
+				j = 0;
+			lut = (lut << 8) | j;
+			if ((i & 3) == 3)
+				I40E_WRITE_REG(hw, I40E_VFQF_HLUT(i >> 2), lut);
+		}
+	} else {
+		lut_info = rte_zmalloc("i40e_rss_lut", rss_lut_size, 0);
+		if (!lut_info) {
+			PMD_DRV_LOG(ERR, "No memory can be allocated");
+			return -ENOMEM;
+		}
+
+		for (i = 0; i < rss_lut_size; i++)
+			lut_info[i] = i % vf->num_queue_pairs;
+
+		ret = i40evf_set_rss_lut(&vf->vsi, lut_info,
+					 rss_lut_size);
+		rte_free(lut_info);
+		if (ret)
+			return ret;
 	}
 
 	rss_conf = vf->dev_data->dev_conf.rx_adv_conf.rss_conf;
-- 
2.7.4


  parent reply	other threads:[~2019-08-13 13:23 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-07  0:09 [dpdk-dev] " Xiao Zhang
2019-08-08 16:41 ` [dpdk-dev] [v2] " Xiao Zhang
2019-08-09  2:44   ` Xing, Beilei
2019-08-09  3:25     ` Zhang, Xiao
2019-08-12 10:29   ` [dpdk-dev] [v3] " Xiao Zhang
2019-08-12 17:43     ` [dpdk-dev] [v4] " Xiao Zhang
2019-08-12 12:07       ` Aaron Conole
2019-08-13  1:43       ` Xing, Beilei
2019-08-13 10:40       ` [dpdk-dev] [v5] " Xiao Zhang
2019-08-13  2:21         ` Xing, Beilei
2019-08-13  6:28         ` Ye Xiaolong
2019-08-13  7:24           ` Zhang, Xiao
2019-08-13  7:37             ` Ye Xiaolong
2019-08-13  7:59               ` Zhang, Xiao
2019-08-13 22:17         ` Xiao Zhang [this message]
2019-08-13 14:55           ` [dpdk-dev] [v6] " Ye Xiaolong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1565734665-72404-1-git-send-email-xiao.zhang@intel.com \
    --to=xiao.zhang@intel.com \
    --cc=dev@dpdk.org \
    --cc=stable@dpdk.org \
    --cc=xiaolong.ye@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).