From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id 64CD6A0471 for ; Fri, 21 Jun 2019 18:53:16 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5D7951D550; Fri, 21 Jun 2019 18:53:16 +0200 (CEST) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id C34351D550 for ; Fri, 21 Jun 2019 18:53:14 +0200 (CEST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 40283307D844; Fri, 21 Jun 2019 16:53:14 +0000 (UTC) Received: from rh.redhat.com (ovpn-117-77.ams2.redhat.com [10.36.117.77]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4BDEB60BFB; Fri, 21 Jun 2019 16:53:06 +0000 (UTC) From: Kevin Traynor To: Ajit Khaparde Cc: Lance Richardson , Rahul Gupta , dpdk stable Date: Fri, 21 Jun 2019 17:46:26 +0100 Message-Id: <20190621164626.31219-42-ktraynor@redhat.com> In-Reply-To: <20190621164626.31219-1-ktraynor@redhat.com> References: <20190621164626.31219-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Fri, 21 Jun 2019 16:53:14 +0000 (UTC) Subject: [dpdk-stable] patch 'net/bnxt: fix RSS RETA indirection table ops' has been queued to LTS release 18.11.3 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, FYI, your patch has been queued to LTS release 18.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 06/26/19. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/kevintraynor/dpdk-stable-queue This queued commit can be viewed at: https://github.com/kevintraynor/dpdk-stable-queue/commit/c2e6cd15bfec5fa5c6831e156b83f31158c10d7b Thanks. Kevin Traynor --- >From c2e6cd15bfec5fa5c6831e156b83f31158c10d7b Mon Sep 17 00:00:00 2001 From: Ajit Khaparde Date: Wed, 29 May 2019 17:02:24 -0400 Subject: [PATCH] net/bnxt: fix RSS RETA indirection table ops [ upstream commit 378ab645bb0b9c45960c0c66893ab0017ab60e47 ] We are trying to update the indirection table for all the VNICs. We should update the table only for the default vnic0. Fix the reta update function to only update table entries that are selected by the update mask. Translate queue number to firmware group ID when updating an entry. Fix reta query op to only return table entries as identfied by the provided mask. Translate firmware group IDs to queue numbers. Removed extraneous code from bnxt_reta_query_op(). Fixes: d819382543f3 ("net/bnxt: add RSS redirection table operations") Signed-off-by: Ajit Khaparde Signed-off-by: Lance Richardson Reviewed-by: Rahul Gupta --- drivers/net/bnxt/bnxt_ethdev.c | 92 +++++++++++++++++++++++++--------- drivers/net/bnxt/bnxt_hwrm.c | 1 + 2 files changed, 70 insertions(+), 23 deletions(-) diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index e26b9e3ce..00d758650 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -619,10 +619,4 @@ static void bnxt_print_link_info(struct rte_eth_dev *eth_dev) } -static int bnxt_dev_lsc_intr_setup(struct rte_eth_dev *eth_dev) -{ - bnxt_print_link_info(eth_dev); - return 0; -} - static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) { @@ -893,4 +887,26 @@ static void bnxt_allmulticast_disable_op(struct rte_eth_dev *eth_dev) } +/* Return bnxt_rx_queue pointer corresponding to a given rxq. */ +static struct bnxt_rx_queue *bnxt_qid_to_rxq(struct bnxt *bp, uint16_t qid) +{ + if (qid >= bp->rx_nr_rings) + return NULL; + + return bp->eth_dev->data->rx_queues[qid]; +} + +/* Return rxq corresponding to a given rss table ring/group ID. */ +static uint16_t bnxt_rss_to_qid(struct bnxt *bp, uint16_t fwr) +{ + unsigned int i; + + for (i = 0; i < bp->rx_nr_rings; i++) { + if (bp->grp_info[i].fw_grp_id == fwr) + return i; + } + + return INVALID_HW_RING_ID; +} + static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev, struct rte_eth_rss_reta_entry64 *reta_conf, @@ -899,22 +915,42 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev, struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; struct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf; - struct bnxt_vnic_info *vnic; + struct bnxt_vnic_info *vnic = &bp->vnic_info[0]; + uint16_t tbl_size = HW_HASH_INDEX_SIZE; + uint16_t idx, sft; int i; + if (!vnic->rss_table) + return -EINVAL; + if (!(dev_conf->rxmode.mq_mode & ETH_MQ_RX_RSS_FLAG)) return -EINVAL; - if (reta_size != HW_HASH_INDEX_SIZE) { + if (reta_size != tbl_size) { PMD_DRV_LOG(ERR, "The configured hash table lookup size " "(%d) must equal the size supported by the hardware " - "(%d)\n", reta_size, HW_HASH_INDEX_SIZE); + "(%d)\n", reta_size, tbl_size); return -EINVAL; } - /* Update the RSS VNIC(s) */ - for (i = 0; i < bp->max_vnics; i++) { - vnic = &bp->vnic_info[i]; - memcpy(vnic->rss_table, reta_conf, reta_size); - bnxt_hwrm_vnic_rss_cfg(bp, vnic); + + for (i = 0; i < reta_size; i++) { + struct bnxt_rx_queue *rxq; + + idx = i / RTE_RETA_GROUP_SIZE; + sft = i % RTE_RETA_GROUP_SIZE; + + if (!(reta_conf[idx].mask & (1ULL << sft))) + continue; + + rxq = bnxt_qid_to_rxq(bp, reta_conf[idx].reta[sft]); + if (!rxq) { + PMD_DRV_LOG(ERR, "Invalid ring in reta_conf.\n"); + return -EINVAL; + } + + vnic->rss_table[i] = + vnic->fw_grp_ids[reta_conf[idx].reta[sft]]; } + + bnxt_hwrm_vnic_rss_cfg(bp, vnic); return 0; } @@ -926,6 +962,6 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev, struct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private; struct bnxt_vnic_info *vnic = &bp->vnic_info[0]; - struct rte_intr_handle *intr_handle - = &bp->pdev->intr_handle; + uint16_t tbl_size = HW_HASH_INDEX_SIZE; + uint16_t idx, sft, i; /* Retrieve from the default VNIC */ @@ -935,16 +971,26 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev, return -EINVAL; - if (reta_size != HW_HASH_INDEX_SIZE) { + if (reta_size != tbl_size) { PMD_DRV_LOG(ERR, "The configured hash table lookup size " "(%d) must equal the size supported by the hardware " - "(%d)\n", reta_size, HW_HASH_INDEX_SIZE); + "(%d)\n", reta_size, tbl_size); return -EINVAL; } - /* EW - need to revisit here copying from uint64_t to uint16_t */ - memcpy(reta_conf, vnic->rss_table, reta_size); - if (rte_intr_allow_others(intr_handle)) { - if (eth_dev->data->dev_conf.intr_conf.lsc != 0) - bnxt_dev_lsc_intr_setup(eth_dev); + for (idx = 0, i = 0; i < reta_size; i++) { + idx = i / RTE_RETA_GROUP_SIZE; + sft = i % RTE_RETA_GROUP_SIZE; + + if (reta_conf[idx].mask & (1ULL << sft)) { + uint16_t qid; + + qid = bnxt_rss_to_qid(bp, vnic->rss_table[i]); + + if (qid == INVALID_HW_RING_ID) { + PMD_DRV_LOG(ERR, "Inv. entry in rss table.\n"); + return -EINVAL; + } + reta_conf[idx].reta[sft] = qid; + } } diff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c index 8853391e7..55b5e9720 100644 --- a/drivers/net/bnxt/bnxt_hwrm.c +++ b/drivers/net/bnxt/bnxt_hwrm.c @@ -1608,4 +1608,5 @@ int bnxt_hwrm_vnic_rss_cfg(struct bnxt *bp, rte_cpu_to_le_64(vnic->rss_hash_key_dma_addr); req.rss_ctx_idx = rte_cpu_to_le_16(vnic->rss_rule); + req.vnic_id = rte_cpu_to_le_16(vnic->fw_vnic_id); rc = bnxt_hwrm_send_message(bp, &req, sizeof(req), BNXT_USE_CHIMP_MB); -- 2.20.1 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-06-21 17:22:13.918839528 +0100 +++ 0042-net-bnxt-fix-RSS-RETA-indirection-table-ops.patch 2019-06-21 17:22:11.758518329 +0100 @@ -1 +1 @@ -From 378ab645bb0b9c45960c0c66893ab0017ab60e47 Mon Sep 17 00:00:00 2001 +From c2e6cd15bfec5fa5c6831e156b83f31158c10d7b Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 378ab645bb0b9c45960c0c66893ab0017ab60e47 ] + @@ -19 +20,0 @@ -Cc: stable@dpdk.org @@ -30 +31 @@ -index 41771d8e2..b5ed0536c 100644 +index e26b9e3ce..00d758650 100644 @@ -42,3 +43,3 @@ - /* - * Determine whether the current configuration requires support for scattered -@@ -978,4 +972,26 @@ static void bnxt_allmulticast_disable_op(struct rte_eth_dev *eth_dev) + static int bnxt_dev_start_op(struct rte_eth_dev *eth_dev) + { +@@ -893,4 +887,26 @@ static void bnxt_allmulticast_disable_op(struct rte_eth_dev *eth_dev) @@ -71 +72 @@ -@@ -984,22 +1000,42 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev, +@@ -899,22 +915,42 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev, @@ -122 +123 @@ -@@ -1011,6 +1047,6 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev, +@@ -926,6 +962,6 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev, @@ -131 +132 @@ -@@ -1020,16 +1056,26 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev, +@@ -935,16 +971,26 @@ static int bnxt_reta_query_op(struct rte_eth_dev *eth_dev, @@ -166 +167 @@ -index c5aca89b2..0c6af1622 100644 +index 8853391e7..55b5e9720 100644