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 65878A055D for ; Thu, 18 Feb 2021 19:19:34 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 527361607F5; Thu, 18 Feb 2021 19:19:34 +0100 (CET) Received: from mail-pj1-f48.google.com (mail-pj1-f48.google.com [209.85.216.48]) by mails.dpdk.org (Postfix) with ESMTP id 05CB640040 for ; Thu, 18 Feb 2021 19:19:31 +0100 (CET) Received: by mail-pj1-f48.google.com with SMTP id t2so2025980pjq.2 for ; Thu, 18 Feb 2021 10:19:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:mime-version; bh=QlG31oNdrDuwBRQ8tMgrqjMDo0ckHv3Tb1byK4ByJH0=; b=F+l6MZTAwxmzTtQA4cLGPifWlvN25Z+m263T6TIw1bpSNegYPLWIXD6E4VZ0u4mfi1 PKsgG0zBMc6ka8Sa00Oqaez4rZvy+b1Cl7P5hnBxj7rqaPJwRzKbki+3I+jkGiIcEDhi 3lDSR02UaYLaHhQ4M8FNeyZ2HMiK1yuQXHQ1Y= 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:mime-version; bh=QlG31oNdrDuwBRQ8tMgrqjMDo0ckHv3Tb1byK4ByJH0=; b=J9qeXoQ0apvhm1rid2LkMdF1ueIdrDmO0/CqrXqoUEdJ++J01NgmhlM+X9g+S+/awY xV8ATb6a9LN2e0E7wh3VnghWLcF1ByleAHboT+8hvkYM/h+WWAJqtTDFtCJByi3vG3JI slkela+9rh+AD5MqG/ZbzlOM8OK5jvHBxn1o5d00X+F441XWwXgvI0+sIYcviKpuM113 F4GaMgZd0pg98Uxu+UEphpFNsPHhxCslYX80npOjVU9syy4l8f/JWMR+c7U84Wf8vnv9 1fqI9SzBBwdjNtz1Zte+NpQS0VZ7p7gM6REB9pLvU5FCkB4IeKPeHMOUDI31GY39MoWg Y6+Q== X-Gm-Message-State: AOAM532K+o114DSQqv4yAKoGy5pfUXFaumYw7fUV71FIqEI6itI9nlBK mJZvKFYafpoNWIiry4wUttNVhg== X-Google-Smtp-Source: ABdhPJwWN8xWaypnEahG910VHQCWHUTSnXrSmrz3pZJvUSwPe6Muj2kSIoWQyj6VFfBk4ADPqSFjUA== X-Received: by 2002:a17:90b:180d:: with SMTP id lw13mr5075695pjb.94.1613672370918; Thu, 18 Feb 2021 10:19:30 -0800 (PST) Received: from localhost.localdomain ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id l21sm5908256pjy.31.2021.02.18.10.19.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 18 Feb 2021 10:19:30 -0800 (PST) From: Lance Richardson To: Ajit Khaparde , Somnath Kotur , Rahul Gupta Cc: dev@dpdk.org, stable@dpdk.org Date: Thu, 18 Feb 2021 13:19:20 -0500 Message-Id: <20210218181920.223463-1-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Type: multipart/signed; protocol="application/pkcs7-signature"; micalg=sha-256; boundary="0000000000007ac04c05bba060f4" X-Content-Filtered-By: Mailman/MimeDel 2.1.29 Subject: [dpdk-stable] [PATCH] net/bnxt: fix Rx queue count implementation 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" --0000000000007ac04c05bba060f4 Content-Transfer-Encoding: 8bit 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") Signed-off-by: Lance Richardson Reviewed-by: Somnath Kotur Cc: stable@dpdk.org --- 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 d7e0d4621a..28c0a9049c 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 22c880c5c3..9824cdb6d8 100644 --- a/drivers/net/bnxt/bnxt_ethdev.c +++ b/drivers/net/bnxt/bnxt_ethdev.c @@ -2942,8 +2942,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; @@ -2957,15 +2957,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_P5(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 4674f7cea2..e8f174fc57 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -827,8 +827,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 0e31b37cad..06d10848da 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) + #define BNXT_RX_POST_THRESH 32 /* Number of descriptors to process per inner loop in vector mode. */ -- 2.25.1 --0000000000007ac04c05bba060f4--