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 43E58A0527 for ; Sat, 18 Jul 2020 06:07:14 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 33CFE1BF78; Sat, 18 Jul 2020 06:07:14 +0200 (CEST) Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by dpdk.org (Postfix) with ESMTP id CDF681BF78; Sat, 18 Jul 2020 06:07:11 +0200 (CEST) IronPort-SDR: q+e34i+q9TO7KD530nGwsKMluiNuQDpGSz4ynVzZaZo9YPVDlbW03d/i3cwTCAbujp0oCAkBox vLQGXLaY6vEA== X-IronPort-AV: E=McAfee;i="6000,8403,9685"; a="137181564" X-IronPort-AV: E=Sophos;i="5.75,365,1589266800"; d="scan'208";a="137181564" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Jul 2020 21:07:10 -0700 IronPort-SDR: HfDUGIU0dp5V7Ht9bNWvXEH6H6j9L+WbdFn6c3khL1H8r1wyM3SWOVEeOY6uETI7q8vVMKz0Wl R+cVuutUHdcQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,365,1589266800"; d="scan'208";a="461067355" Received: from jguo15x-mobl.ccr.corp.intel.com (HELO [10.255.29.8]) ([10.255.29.8]) by orsmga005.jf.intel.com with ESMTP; 17 Jul 2020 21:07:09 -0700 To: "Chen, BoX C" , "Wang, ShougangX" , "dev@dpdk.org" Cc: "Xing, Beilei" , "stable@dpdk.org" References: <20200715063515.9262-1-shougangx.wang@intel.com> From: Jeff Guo Message-ID: <1046de40-5938-8dea-b46b-e95cc64a88ba@intel.com> Date: Sat, 18 Jul 2020 12:07:08 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Subject: Re: [dpdk-stable] [dpdk-dev] [PATCH] net/i40e: fix incorrect hash look up table 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" hi, shougang On 7/15/2020 5:07 PM, Chen, BoX C wrote: > Tested-by: zhang,xi > > Regards, > Chen Bo > >> -----Original Message----- >> From: dev On Behalf Of Shougang Wang >> Sent: July 15, 2020 14:35 >> To: dev@dpdk.org >> Cc: Xing, Beilei ; Guo, Jia ; Wang, >> ShougangX ; stable@dpdk.org >> Subject: [dpdk-dev] [PATCH] net/i40e: fix incorrect hash look up table >> >> The hash look up table(LUT) will not be initializing when starting testpmd with >> --disable-rss. So that some queues in LUT will be invalid if rx queues is less >> than last time. When enable RSS by creating RSS rule, some packets will not >> be into the valid queues. What does "So that some queues in LUT will be invalid if rx queues is less than last time" means, Could you explain more clear? >> This patch fixes this issue by initializing the LUT when creating an RSS rule. >> >> Fixes: feaae285b342 ("net/i40e: support hash configuration in RSS flow") >> Cc: stable@dpdk.org >> >> Signed-off-by: Shougang Wang >> --- >> drivers/net/i40e/i40e_ethdev.c | 52 >> ++++++++++++++++++++++++++++++++++ >> 1 file changed, 52 insertions(+) >> >> diff --git a/drivers/net/i40e/i40e_ethdev.c b/drivers/net/i40e/i40e_ethdev.c >> index 393b5320f..2a92bd8ef 100644 >> --- a/drivers/net/i40e/i40e_ethdev.c >> +++ b/drivers/net/i40e/i40e_ethdev.c >> @@ -13070,6 +13070,49 @@ i40e_rss_conf_init(struct >> i40e_rte_flow_rss_conf *out, >> return 0; >> } >> >> +static int >> +i40e_rss_init_lut(struct i40e_pf *pf) I saw that this function is almost the same functional as i40e_rss_config_queue_region, could you check if it could be reused and merged one. >> +{ >> +struct i40e_hw *hw = I40E_PF_TO_HW(pf); >> +uint32_t lut = 0; >> +uint16_t j, num; >> +uint32_t i; >> + >> +/* >> + * If both VMDQ and RSS enabled, not all of PF queues are configured. >> + * It's necessary to calculate the actual PF queues that are configured. >> + */ >> +if (pf->dev_data->dev_conf.rxmode.mq_mode & >> ETH_MQ_RX_VMDQ_FLAG) >> +num = i40e_pf_calc_configured_queues_num(pf); >> +else >> +num = pf->dev_data->nb_rx_queues; >> + >> +num = RTE_MIN(num, I40E_MAX_Q_PER_TC); >> +PMD_INIT_LOG(INFO, "Max of contiguous %u PF queues are >> configured", >> + num); >> + >> +if (num == 0) { >> +PMD_INIT_LOG(ERR, >> +"No PF queues are configured to enable RSS for >> port %u", >> +pf->dev_data->port_id); >> +return -ENOTSUP; >> +} >> + >> +if (pf->adapter->rss_reta_updated == 0) { >> +for (i = 0, j = 0; i < hw->func_caps.rss_table_size; i++, j++) { >> +if (j == num) >> +j = 0; >> +lut = (lut << 8) | (j & ((0x1 << >> +hw->func_caps.rss_table_entry_width) - 1)); >> +if ((i & 3) == 3) >> +I40E_WRITE_REG(hw, I40E_PFQF_HLUT(i >> >> 2), >> + rte_bswap32(lut)); >> +} >> +} >> + >> +return 0; >> +} >> + >> /* Write HENA register to enable hash */ static int i40e_rss_hash_set(struct >> i40e_pf *pf, struct i40e_rte_flow_rss_conf *rss_conf) @@ -13318,12 >> +13361,21 @@ static int i40e_rss_enable_hash(struct i40e_pf *pf, >> struct i40e_rte_flow_rss_conf *conf) >> { >> +enum rte_eth_rx_mq_mode mq_mode = >> +pf->dev_data->dev_conf.rxmode.mq_mode; >> struct i40e_rte_flow_rss_conf *rss_info = &pf->rss_info; >> struct i40e_rte_flow_rss_conf rss_conf; >> >> if (!(conf->conf.types & pf->adapter->flow_types_mask)) >> return -ENOTSUP; >> >> +/* >> + * If the RSS is disabled before this, the LUT is uninitialized. >> + * So it is necessary to initialize it here. >> + */ Please don't use an empty /* line, use /* Comment.... >> +if (!(mq_mode & ETH_MQ_RX_RSS_FLAG) && !pf- >>> rss_info.conf.queue_num) >> +if (i40e_rss_init_lut(pf)) >> +return -ENOTSUP; How can it know it is not support in function's caller,  better to use variable to restore the calling return and return the variable. >> + >> memset(&rss_conf, 0, sizeof(rss_conf)); >> rte_memcpy(&rss_conf, conf, sizeof(rss_conf)); >> >> -- >> 2.17.1