From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E5EA0A0471 for ; Tue, 13 Aug 2019 15:23:09 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id C5B881BE8F; Tue, 13 Aug 2019 15:23:09 +0200 (CEST) Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by dpdk.org (Postfix) with ESMTP id 776F7378B; Tue, 13 Aug 2019 15:23:05 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Aug 2019 06:23:04 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,381,1559545200"; d="scan'208";a="194193504" Received: from npg-dpdk-zhangxiao.sh.intel.com ([10.67.110.190]) by fmsmga001.fm.intel.com with ESMTP; 13 Aug 2019 06:23:03 -0700 From: Xiao Zhang To: dev@dpdk.org Cc: xiaolong.ye@intel.com, Xiao Zhang , stable@dpdk.org Date: Wed, 14 Aug 2019 06:17:45 +0800 Message-Id: <1565734665-72404-1-git-send-email-xiao.zhang@intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1565692851-36962-1-git-send-email-xiao.zhang@intel.com> References: <1565692851-36962-1-git-send-email-xiao.zhang@intel.com> Subject: [dpdk-stable] [v6] net/i40e: fix vf runtime queues rss config X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" 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 --- 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