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 A8BC8A0548 for ; Mon, 17 May 2021 21:18:09 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9FFC740041; Mon, 17 May 2021 21:18:09 +0200 (CEST) Received: from mail-pl1-f182.google.com (mail-pl1-f182.google.com [209.85.214.182]) by mails.dpdk.org (Postfix) with ESMTP id B23AD40041 for ; Mon, 17 May 2021 21:18:07 +0200 (CEST) Received: by mail-pl1-f182.google.com with SMTP id v13so3715603ple.9 for ; Mon, 17 May 2021 12:18:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version; bh=wcgDASYWWdgsrXKDFWCaEszkIED0+GZs9gWHgAdPpgI=; b=dlCmtlQ1EMCOvj9QqnkmmMiyzMN9RgbHiLHWLoJpMgu8UefYJUV0yBkBWwopaXT1AH LjTsbWeSuBfG2kvi9UCqHd/VGaA9plXnV7GFH+/7DTNA/ZACMKRh/pk7uACI/vKOyebu x9H4ODzEgiKpvl+Gqir4SIE2SWYWA8204QO5s= 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; bh=wcgDASYWWdgsrXKDFWCaEszkIED0+GZs9gWHgAdPpgI=; b=QhvKDCWFemgKOEUf1YdUPJw1JbOnjS1Ym8d4RpB0LMF6NVVptqzz3LeQzIZoRtWZrI gk3cFSLDcHF++UeSrw6tz4Jnop2VqgdS4rdkdUC23AMaW2DwcAp7w85GgLGGum9MxsaE 3/48BwvcmbrIwKnPCRnTkc6g5qlRert/BFBPCLW6FEPm0r96U4Chadi80bc7+YuP7Dhc s5Z4bzQEjmF0qemGLiIUcj1VXdniZ6WMTfHM0MnnQCDAWZv2A3GGmztk7ww+pUYg4wT1 SdAUvGc20Gn32hSKv5/jWOLg1KZhckqP0zOWvoPViMEG4SI8NqaFOmBA/XBiXKzKXuO+ AWTA== X-Gm-Message-State: AOAM533Lfmq5bFnxzhMs7Qfl8ni+yopZ1l5TsK20r5zVTZfnpddED3Si R0Ys78oMJWOHVU28x29bXi7Oxg== X-Google-Smtp-Source: ABdhPJxEai2MZDnnt7B+uefj+kvBsXCnQ/ZcToNNF+DbSxFbNRKn/cw3eOLyOZrUkM8JOoBS5rEVmw== X-Received: by 2002:a17:902:d305:b029:f0:d3db:26db with SMTP id b5-20020a170902d305b02900f0d3db26dbmr18494plc.36.1621279086820; Mon, 17 May 2021 12:18:06 -0700 (PDT) Received: from localhost.localdomain ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id v11sm624466pgs.6.2021.05.17.12.18.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 May 2021 12:18:06 -0700 (PDT) From: Lance Richardson To: Ajit Khaparde , Somnath Kotur , Rahul Gupta Cc: stable@dpdk.org Date: Mon, 17 May 2021 15:10:46 -0400 Message-Id: <20210517191046.42686-3-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210517191046.42686-1-lance.richardson@broadcom.com> References: <20210517191046.42686-1-lance.richardson@broadcom.com> MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="00000000000012013905c28b74d0" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-stable] [PATCH 20.11 2/2] net/bnxt: fix Rx queue count 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" --00000000000012013905c28b74d0 Content-Transfer-Encoding: 8bit [ upstream commit 9f13e888ef77d36a97a3ace278e8e812a98e740d ] bnxt_rx_queue_count_op() incorrectly returns the number of filled but unprocessed completion queue entries instead of the number of filled but unprocessed received packet completions. Fix by properly accounting for the number of completion ring entries used by the various received packet completion types. Fixes: 34c0ba839bae ("net/bnxt: fix Rx queue count") Cc: stable@dpdk.org Signed-off-by: Lance Richardson Reviewed-by: Somnath Kotur Reviewed-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_cpr.h | 4 ++++ drivers/net/bnxt/bnxt_ethdev.c | 38 +++++++++++++++++++++++++++++----- drivers/net/bnxt/bnxt_rxr.c | 3 +-- drivers/net/bnxt/bnxt_rxr.h | 4 ++++ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h index ff9697f4c..c769bde61 100644 --- a/drivers/net/bnxt/bnxt_cpr.h +++ b/drivers/net/bnxt/bnxt_cpr.h @@ -26,6 +26,10 @@ struct bnxt_db_info; #define CMP_TYPE(cmp) \ (((struct cmpl_base *)cmp)->type & CMPL_BASE_TYPE_MASK) +/* Get completion length from completion type, in 16-byte units. */ +#define CMP_LEN(cmp_type) (((cmp_type) & 1) + 1) + + #define ADV_RAW_CMP(idx, n) ((idx) + (n)) #define NEXT_RAW_CMP(idx) ADV_RAW_CMP(idx, 1) #define RING_CMP(ring, idx) ((idx) & (ring)->ring_mask) diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c index 6732251ff..1a91c3d4a 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -2930,8 +2930,8 @@ static uint32_t bnxt_rx_queue_count_op(struct rte_eth_dev *dev, uint16_t rx_queue_id) { struct bnxt *bp = (struct bnxt *)dev->data->dev_private; - uint32_t desc = 0, raw_cons = 0, cons; struct bnxt_cp_ring_info *cpr; + uint32_t desc = 0, raw_cons; struct bnxt_rx_queue *rxq; struct rx_pkt_cmpl *rxcmp; int rc; @@ -2945,15 +2945,43 @@ bnxt_rx_queue_count_op(struct rte_eth_dev *dev, uint16_t rx_queue_id) raw_cons = cpr->cp_raw_cons; while (1) { + uint32_t agg_cnt, cons, cmpl_type; + cons = RING_CMP(cpr->cp_ring_struct, raw_cons); - rte_prefetch0(&cpr->cp_desc_ring[cons]); rxcmp = (struct rx_pkt_cmpl *)&cpr->cp_desc_ring[cons]; - if (!CMP_VALID(rxcmp, raw_cons, cpr->cp_ring_struct)) { + if (!CMP_VALID(rxcmp, raw_cons, cpr->cp_ring_struct)) break; - } else { - raw_cons++; + + cmpl_type = CMP_TYPE(rxcmp); + + switch (cmpl_type) { + case CMPL_BASE_TYPE_RX_L2: + case CMPL_BASE_TYPE_RX_L2_V2: + agg_cnt = BNXT_RX_L2_AGG_BUFS(rxcmp); + raw_cons = raw_cons + CMP_LEN(cmpl_type) + agg_cnt; desc++; + break; + + case CMPL_BASE_TYPE_RX_TPA_END: + if (BNXT_CHIP_THOR(rxq->bp)) { + struct rx_tpa_v2_end_cmpl_hi *p5_tpa_end; + + p5_tpa_end = (void *)rxcmp; + agg_cnt = BNXT_TPA_END_AGG_BUFS_TH(p5_tpa_end); + } else { + struct rx_tpa_end_cmpl *tpa_end; + + tpa_end = (void *)rxcmp; + agg_cnt = BNXT_TPA_END_AGG_BUFS(tpa_end); + } + + raw_cons = raw_cons + CMP_LEN(cmpl_type) + agg_cnt; + desc++; + break; + + default: + raw_cons += CMP_LEN(cmpl_type); } } diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c index 34de09fdc..c454601b5 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -761,8 +761,7 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt, goto next_rx; } - agg_buf = (rxcmp->agg_bufs_v1 & RX_PKT_CMPL_AGG_BUFS_MASK) - >> RX_PKT_CMPL_AGG_BUFS_SFT; + agg_buf = BNXT_RX_L2_AGG_BUFS(rxcmp); if (agg_buf && !bnxt_agg_bufs_valid(cpr, agg_buf, tmp_raw_cons)) return -EBUSY; diff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h index be5afcc8d..f8eb9b70b 100644 --- a/drivers/net/bnxt/bnxt_rxr.h +++ b/drivers/net/bnxt/bnxt_rxr.h @@ -37,6 +37,10 @@ static inline uint16_t bnxt_tpa_start_agg_id(struct bnxt *bp, #define BNXT_TPA_END_AGG_ID_TH(cmp) \ rte_le_to_cpu_16((cmp)->agg_id) +#define BNXT_RX_L2_AGG_BUFS(cmp) \ + (((cmp)->agg_bufs_v1 & RX_PKT_CMPL_AGG_BUFS_MASK) >> \ + RX_PKT_CMPL_AGG_BUFS_SFT) + /* Number of descriptors to process per inner loop in vector mode. */ #define RTE_BNXT_DESCS_PER_LOOP 4U -- 2.25.1 --00000000000012013905c28b74d0--