From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 045BCA0524 for ; Fri, 5 Feb 2021 12:21:49 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E90774067B; Fri, 5 Feb 2021 12:21:49 +0100 (CET) Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by mails.dpdk.org (Postfix) with ESMTP id 5D75A1606C6 for ; Fri, 5 Feb 2021 12:21:48 +0100 (CET) Received: by mail-wm1-f45.google.com with SMTP id m1so5622153wml.2 for ; Fri, 05 Feb 2021 03:21:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Tquh6uomzYG9Qo/yCD1oMnhLRf7Tl3DXtRiL4juCOiQ=; b=rPEoXfBAe2+MpdwmnAWL0hW3s+GZHlIJUhobWFqL4u77ACYxSXBqk+nXbfhZIHAl8N bDt+UnXIz+Cg16qmWF5yWuhYycTNvPRUSReS6HbOQotuUprPSKvZ0godyE9+Ba4VW9Ct Y/0/2zcV2cO3cadrgRfqamUttU7ebtXfvFBjkcc+I0nhDULVINCx6FjVFhsL2C1Rrp1g vTbUD6+8Dd/IchfPJcB5P+TIrmG62zyHqAE+/AEeWA5pGESDw5ouwqQPnct7rLHPnYPO QDnEzzgNi7lt/61KLejy7skSOw70TBJJUPfqhmXgghX6GI2UZJTlebB8P9lxyBTFpan8 h4jQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Tquh6uomzYG9Qo/yCD1oMnhLRf7Tl3DXtRiL4juCOiQ=; b=gQVddU/B3t4EXHUhuWFlYdIB3/IkJEZU+JU8lUNiGbA1AeuEAebkC+UMoXsLsMxGBm vHX7jwZmVXdOEB9Wg/HS5/jFi8EJWpArVrDT1tSTsboEyVoXa9j6/zzlOGVFzVslUAJm dxL7iOAN55skVDYeUpFOplD4WoqBJCAfiaRaSGBjdvRJZ62J5uu3AX5HEZJsX/oOu9WZ 6XsFE8CJ2PY83cQK6E3vMLdjBRCYBwHzNoA6Ej2kF84vegQ6D/NdZQFnqiUskKLJThdw 72wW/pKJENsNfJwvz6iKsTP4tlyGR1+2OQV4E4SjLMgYGWInA67OL8kuzXdm0js9FN3H lvYQ== X-Gm-Message-State: AOAM533kVvTwS8hyfrqRxt33BiWzfTCyPoMJCsR2IDqWguoOowvSmN80 7Qx2xeCAvrCbh56QJ4HlRibZag5p9XQhTXnw X-Google-Smtp-Source: ABdhPJxDaC3COEKB1wiarel5lUy7J8SgWiZCDo+ZW82L0+Ud3ftnr6U3FvGT9UAHIiXuNRZfN3jg9g== X-Received: by 2002:a05:600c:1911:: with SMTP id j17mr3166381wmq.63.1612524108153; Fri, 05 Feb 2021 03:21:48 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id w14sm12049003wro.86.2021.02.05.03.21.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Feb 2021 03:21:47 -0800 (PST) From: luca.boccassi@gmail.com To: Sriharsha Basavapatna Cc: Somnath Kotur , Ajit Khaparde , dpdk stable Date: Fri, 5 Feb 2021 11:15:31 +0000 Message-Id: <20210205111920.1272063-45-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210205111920.1272063-1-luca.boccassi@gmail.com> References: <20210205111920.1272063-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/bnxt: fix max rings computation' has been queued to stable release 20.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 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 stable release 20.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/07/21. 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/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/a4ac19d250df84e329d8891cb0e3a7fa95da36ed Thanks. Luca Boccassi --- >From a4ac19d250df84e329d8891cb0e3a7fa95da36ed Mon Sep 17 00:00:00 2001 From: Sriharsha Basavapatna Date: Fri, 28 Aug 2020 07:13:22 -0400 Subject: [PATCH] net/bnxt: fix max rings computation [ upstream commit c72fe7ac3b63629f1f46e4d91d9abc0d7c064d93 ] The current max_rings computation does not take into account the case when max_nq_rings is <= num_async_cpr. This results in a wrong value like 0, when max_nq_rings is 1. Fix this by subtracting num_async_cpr only when max_cp_rings > num_async_cpr. Apart from this, the entire logic is currently spread across a few macros, making it hard to read and debug this code. Move this code into an inline function. max_msix is not used in the max_rings calculation. Apparently the max_msix field returned in HWRM_RESC_QCAPS is only valid for Thor and newer chips. On Wh+ it will be equal to min_compl_rings. Also, when a function reset is performed on an application quit, FW will not reset the VF resource pool as per design. This can lead to a strange condition wherein the max_msix field on Wh+ keeps changing on each application re-load thereby throwing throwing off the max_rings computation. Fixes: f03e66cb64ce ("net/bnxt: limit queue count for NS3/Stingray devices") Signed-off-by: Sriharsha Basavapatna Signed-off-by: Somnath Kotur Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt.h | 41 +++++++++++++++++++++++----------- drivers/net/bnxt/bnxt_ethdev.c | 2 +- drivers/net/bnxt/bnxt_rxq.c | 7 +++--- drivers/net/bnxt/bnxt_txq.c | 2 +- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h index 9bd4f1da97..21f1604fcb 100644 --- a/drivers/net/bnxt/bnxt.h +++ b/drivers/net/bnxt/bnxt.h @@ -752,19 +752,6 @@ struct bnxt { uint16_t max_tx_rings; uint16_t max_rx_rings; #define MAX_STINGRAY_RINGS 128U -/* For sake of symmetry, max Tx rings == max Rx rings, one stat ctx for each */ -#define BNXT_MAX_RX_RINGS(bp) \ - (BNXT_STINGRAY(bp) ? RTE_MIN(RTE_MIN(bp->max_rx_rings / 2U, \ - MAX_STINGRAY_RINGS), \ - bp->max_stat_ctx / 2U) : \ - RTE_MIN(bp->max_rx_rings / 2U, \ - bp->max_stat_ctx / 2U)) -#define BNXT_MAX_TX_RINGS(bp) \ - (RTE_MIN((bp)->max_tx_rings, BNXT_MAX_RX_RINGS(bp))) - -#define BNXT_MAX_RINGS(bp) \ - (RTE_MIN((((bp)->max_cp_rings - BNXT_NUM_ASYNC_CPR(bp)) / 2U), \ - BNXT_MAX_TX_RINGS(bp))) #define BNXT_MAX_VF_REP_RINGS 8 @@ -823,6 +810,34 @@ struct bnxt { uint16_t tx_cfa_action; }; +static +inline uint16_t bnxt_max_rings(struct bnxt *bp) +{ + uint16_t max_tx_rings = bp->max_tx_rings; + uint16_t max_rx_rings = bp->max_rx_rings; + uint16_t max_cp_rings = bp->max_cp_rings; + uint16_t max_rings; + + /* For the sake of symmetry: + * max Tx rings == max Rx rings, one stat ctx for each. + */ + if (BNXT_STINGRAY(bp)) { + max_rx_rings = RTE_MIN(RTE_MIN(max_rx_rings / 2U, + MAX_STINGRAY_RINGS), + bp->max_stat_ctx / 2U); + } else { + max_rx_rings = RTE_MIN(max_rx_rings / 2U, + bp->max_stat_ctx / 2U); + } + + max_tx_rings = RTE_MIN(max_tx_rings, max_rx_rings); + if (max_cp_rings > BNXT_NUM_ASYNC_CPR(bp)) + max_cp_rings -= BNXT_NUM_ASYNC_CPR(bp); + max_rings = RTE_MIN(max_cp_rings / 2U, max_tx_rings); + + return max_rings; +} + #define BNXT_FC_TIMER 1 /* Timer freq in Sec Flow Counters */ /** diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 1719995871..9c1bf57494 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -920,7 +920,7 @@ static int bnxt_dev_info_get_op(struct rte_eth_dev *eth_dev, if (BNXT_PF(bp)) dev_info->max_vfs = pdev->max_vfs; - max_rx_rings = BNXT_MAX_RINGS(bp); + max_rx_rings = bnxt_max_rings(bp); /* For the sake of symmetry, max_rx_queues = max_tx_queues */ dev_info->max_rx_queues = max_rx_rings; dev_info->max_tx_queues = max_rx_rings; diff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c index 61196eba93..8637559370 100644 --- a/drivers/net/bnxt/bnxt_rxq.c +++ b/drivers/net/bnxt/bnxt_rxq.c @@ -311,7 +311,7 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev, if (rc) return rc; - if (queue_idx >= BNXT_MAX_RINGS(bp)) { + if (queue_idx >= bnxt_max_rings(bp)) { PMD_DRV_LOG(ERR, "Cannot create Rx ring %d. Only %d rings available\n", queue_idx, bp->max_rx_rings); @@ -364,8 +364,9 @@ int bnxt_rx_queue_setup_op(struct rte_eth_dev *eth_dev, eth_dev->data->rx_queues[queue_idx] = rxq; /* Allocate RX ring hardware descriptors */ - if (bnxt_alloc_rings(bp, queue_idx, NULL, rxq, rxq->cp_ring, NULL, - "rxr")) { + rc = bnxt_alloc_rings(bp, queue_idx, NULL, rxq, rxq->cp_ring, NULL, + "rxr"); + if (rc) { PMD_DRV_LOG(ERR, "ring_dma_zone_reserve for rx_ring failed!\n"); goto err; diff --git a/drivers/net/bnxt/bnxt_txq.c b/drivers/net/bnxt/bnxt_txq.c index c9792a2af2..99a31cef28 100644 --- a/drivers/net/bnxt/bnxt_txq.c +++ b/drivers/net/bnxt/bnxt_txq.c @@ -98,7 +98,7 @@ int bnxt_tx_queue_setup_op(struct rte_eth_dev *eth_dev, if (rc) return rc; - if (queue_idx >= BNXT_MAX_RINGS(bp)) { + if (queue_idx >= bnxt_max_rings(bp)) { PMD_DRV_LOG(ERR, "Cannot create Tx ring %d. Only %d rings available\n", queue_idx, bp->max_tx_rings); -- 2.29.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-02-05 11:18:31.303207226 +0000 +++ 0045-net-bnxt-fix-max-rings-computation.patch 2021-02-05 11:18:28.726689589 +0000 @@ -1 +1 @@ -From c72fe7ac3b63629f1f46e4d91d9abc0d7c064d93 Mon Sep 17 00:00:00 2001 +From a4ac19d250df84e329d8891cb0e3a7fa95da36ed Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit c72fe7ac3b63629f1f46e4d91d9abc0d7c064d93 ] + @@ -25 +26,0 @@ -Cc: stable@dpdk.org @@ -38 +39 @@ -index 9c1c87489e..bc0935272a 100644 +index 9bd4f1da97..21f1604fcb 100644 @@ -61 +62 @@ -@@ -822,6 +809,34 @@ struct bnxt { +@@ -823,6 +810,34 @@ struct bnxt { @@ -97 +98 @@ -index 0b14ca2342..bf89635776 100644 +index 1719995871..9c1bf57494 100644 @@ -110 +111 @@ -index 328cc994da..19e11e47bf 100644 +index 61196eba93..8637559370 100644