get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/84911/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 84911,
    "url": "http://patches.dpdk.org/api/patches/84911/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20201209235347.16180-18-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20201209235347.16180-18-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201209235347.16180-18-ajit.khaparde@broadcom.com",
    "date": "2020-12-09T23:53:47",
    "name": "[v3,17/17] net/bnxt: modify ring index logic",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "fa1c924cb2a741dc58c678887f1a46cb470390f9",
    "submitter": {
        "id": 2064,
        "url": "http://patches.dpdk.org/api/people/2064/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajitkhaparde@gmail.com"
    },
    "delegate": {
        "id": 1766,
        "url": "http://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20201209235347.16180-18-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 14226,
            "url": "http://patches.dpdk.org/api/series/14226/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=14226",
            "date": "2020-12-09T23:53:30",
            "name": "fixes and refactoring changes for bnxt",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/14226/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/84911/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/84911/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 4B4FDA04DB;\n\tThu, 10 Dec 2020 00:59:37 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id F3BF8CA63;\n\tThu, 10 Dec 2020 00:54:24 +0100 (CET)",
            "from mail-pf1-f194.google.com (mail-pf1-f194.google.com\n [209.85.210.194]) by dpdk.org (Postfix) with ESMTP id 64E97CA34\n for <dev@dpdk.org>; Thu, 10 Dec 2020 00:54:17 +0100 (CET)",
            "by mail-pf1-f194.google.com with SMTP id t8so2290637pfg.8\n for <dev@dpdk.org>; Wed, 09 Dec 2020 15:54:17 -0800 (PST)",
            "from localhost.localdomain ([192.19.228.250])\n by smtp.gmail.com with ESMTPSA id s7sm4047693pfh.207.2020.12.09.15.54.14\n for <dev@dpdk.org>\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Wed, 09 Dec 2020 15:54:15 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n h=from:to:subject:date:message-id:in-reply-to:references:mime-version\n :content-transfer-encoding;\n bh=LUcPuUcdWJStMt6YpBS2+lOIGCHNPY1gXi+dEgkoHTE=;\n b=gEFVBEW0DDf9tXLlch6/cGIPL9xYtasU39w1lgvvWAjjcZjVKF+/w087zluNsDuUI4\n 0hwj6oOsAwo+rZZSkBGdtjSssuumRrUJyBMCXUx+x3QVOj3W/Huz9hsXm5vnTnud/nnr\n CXVVPoGyLPTljs47Ich86HeUQfHIG2ceILGnDB32xCWAdHoWfltbKge89jPuL4W+HVGn\n EthTXkcGF6pvLqkVcGWduJDrKil0A+eBi05eG9Z8av2un04nfyzCW7bM7rGrfEq5Y9ea\n LdKCG24+h/oQ33y5GFgRgWEKvwQv5HREj74wL66w06N7yorahfxb+F/sHQoJsPXriMhf\n 0Orw==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=LUcPuUcdWJStMt6YpBS2+lOIGCHNPY1gXi+dEgkoHTE=;\n b=LYUtWYQjrQ/eQ/urazuoX8YTsQgRwWgvr1fHUMNkUc/Zia5ST6iSzCX0sm8mdIE59V\n KezWMNIGneUxfIx/Y8qKtwWS7UwLgqQVt+5m/9sHB8pUNyiubqOEzG60jJvlouVFjuLo\n u7W1z+XAxNV00cKg7lPXAiYhuR5d/vAqJsDgVbNkAxQLNjD03aKhILNqNkvlQ6UlQnCZ\n zwXsD3DGLOoyNORtF5jF0ZtAD8ILF2WAH3Hpe9jNYttvlFZ1LTY4OOSQe+QWCKUZwbjb\n 4RHcjHIhmkuYd6S7NxPOC3g7bvXT1i/SF94o981TacWmLKBEFbqDYZPBRPhX2hVcTi9m\n GxLg==",
        "X-Gm-Message-State": "AOAM5327CbO99QRvEBBnC8+WKnHlCTecKmxf2gTEsdkvDTG1LXl79NjJ\n 6/19xjMUnITKH+Xea8yD3xxiaVo3shwXQULn",
        "X-Google-Smtp-Source": "\n ABdhPJxzygF/1DuAEOEOJSvISdgTy3Fe7xtQpHbUG+OiA9g7OEZ3hZAEiyKs+nyqK6L+TmeosS/SUw==",
        "X-Received": "by 2002:a65:5903:: with SMTP id f3mr4078778pgu.109.1607558055943;\n Wed, 09 Dec 2020 15:54:15 -0800 (PST)",
        "From": "Ajit Khaparde <ajitkhaparde@gmail.com>",
        "X-Google-Original-From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Date": "Wed,  9 Dec 2020 15:53:47 -0800",
        "Message-Id": "<20201209235347.16180-18-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.21.1 (Apple Git-122.3)",
        "In-Reply-To": "<20201209235347.16180-1-ajit.khaparde@broadcom.com>",
        "References": "<20201209192233.6518-1-ajit.khaparde@broadcom.com>\n <20201209235347.16180-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 17/17] net/bnxt: modify ring index logic",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Change the ring logic so that the index increments\nunbounded and mask it only when needed.\n\nModify the existing macros so that the index is not masked.\nAdd a new macro RING_IDX() to mask it only when needed.\n-\nv2->v3: Updated the index calculation in Tx completion processing.\n\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt_cpr.h             |  10 ++-\n drivers/net/bnxt/bnxt_hwrm.c            |   4 +-\n drivers/net/bnxt/bnxt_reps.c            |   4 +-\n drivers/net/bnxt/bnxt_ring.c            |  39 +++++----\n drivers/net/bnxt/bnxt_ring.h            |  40 ++++++---\n drivers/net/bnxt/bnxt_rxr.c             | 110 +++++++++++++-----------\n drivers/net/bnxt/bnxt_rxr.h             |   4 +-\n drivers/net/bnxt/bnxt_rxtx_vec_common.h |  14 +--\n drivers/net/bnxt/bnxt_rxtx_vec_neon.c   |  16 ++--\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c    |  16 ++--\n drivers/net/bnxt/bnxt_txr.c             |  51 ++++++-----\n drivers/net/bnxt/bnxt_txr.h             |   6 +-\n 12 files changed, 179 insertions(+), 135 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_cpr.h b/drivers/net/bnxt/bnxt_cpr.h\nindex ff9697f4c..a763f6006 100644\n--- a/drivers/net/bnxt/bnxt_cpr.h\n+++ b/drivers/net/bnxt/bnxt_cpr.h\n@@ -45,7 +45,7 @@ struct bnxt_db_info;\n } while (0)\n #define B_CP_DB_REARM(cpr, raw_cons)\t\t\t\t\t\\\n \trte_write32((DB_CP_REARM_FLAGS |\t\t\t\t\\\n-\t\t    RING_CMP(((cpr)->cp_ring_struct), raw_cons)),\t\\\n+\t\t    DB_RING_IDX(&((cpr)->cp_db), raw_cons)),\t\t\\\n \t\t    ((cpr)->cp_db.doorbell))\n \n #define B_CP_DB_ARM(cpr)\trte_write32((DB_KEY_CP),\t\t\\\n@@ -65,8 +65,8 @@ struct bnxt_db_info;\n } while (0)\n #define B_CP_DIS_DB(cpr, raw_cons)\t\t\t\t\t\\\n \trte_write32_relaxed((DB_CP_FLAGS |\t\t\t\t\\\n-\t\t\t    RING_CMP(((cpr)->cp_ring_struct), raw_cons)), \\\n-\t\t\t    ((cpr)->cp_db.doorbell))\n+\t\t    DB_RING_IDX(&((cpr)->cp_db), raw_cons)),\t\t\\\n+\t\t    ((cpr)->cp_db.doorbell))\n \n #define B_CP_DB(cpr, raw_cons, ring_mask)\t\t\t\t\\\n \trte_write32((DB_CP_FLAGS |\t\t\t\t\t\\\n@@ -80,8 +80,11 @@ struct bnxt_db_info {\n \t\tuint32_t        db_key32;\n \t};\n \tbool                    db_64;\n+\tuint32_t\t\tdb_ring_mask;\n };\n \n+#define DB_RING_IDX(db, idx)\t((idx) & (db)->db_ring_mask)\n+\n struct bnxt_ring;\n struct bnxt_cp_ring_info {\n \tuint32_t\t\tcp_raw_cons;\n@@ -95,7 +98,6 @@ struct bnxt_cp_ring_info {\n \tuint32_t\t\thw_stats_ctx_id;\n \n \tstruct bnxt_ring\t*cp_ring_struct;\n-\tuint16_t\t\tcp_cons;\n \tbool\t\t\tvalid;\n };\n \ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex a3eb133c0..73647fba8 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -2601,8 +2601,8 @@ bnxt_free_all_hwrm_rings(struct bnxt *bp)\n \t\t\tmemset(txr->tx_buf_ring, 0,\n \t\t\t\t\ttxr->tx_ring_struct->ring_size *\n \t\t\t\t\tsizeof(*txr->tx_buf_ring));\n-\t\t\ttxr->tx_prod = 0;\n-\t\t\ttxr->tx_cons = 0;\n+\t\t\ttxr->tx_raw_prod = 0;\n+\t\t\ttxr->tx_raw_cons = 0;\n \t\t}\n \t\tif (cpr->cp_ring_struct->fw_ring_id != INVALID_HW_RING_ID) {\n \t\t\tbnxt_free_cp_ring(bp, cpr);\ndiff --git a/drivers/net/bnxt/bnxt_reps.c b/drivers/net/bnxt/bnxt_reps.c\nindex 12d677d32..f7bbf77d3 100644\n--- a/drivers/net/bnxt/bnxt_reps.c\n+++ b/drivers/net/bnxt/bnxt_reps.c\n@@ -55,12 +55,12 @@ bnxt_vfr_recv(uint16_t port_id, uint16_t queue_id, struct rte_mbuf *mbuf)\n \tmask = rep_rxr->rx_ring_struct->ring_mask;\n \n \t/* Put this mbuf on the RxQ of the Representor */\n-\tprod_rx_buf = &rep_rxr->rx_buf_ring[rep_rxr->rx_prod & mask];\n+\tprod_rx_buf = &rep_rxr->rx_buf_ring[rep_rxr->rx_raw_prod & mask];\n \tif (*prod_rx_buf == NULL) {\n \t\t*prod_rx_buf = mbuf;\n \t\tvfr_bp->rx_bytes[que] += mbuf->pkt_len;\n \t\tvfr_bp->rx_pkts[que]++;\n-\t\trep_rxr->rx_prod++;\n+\t\trep_rxr->rx_raw_prod++;\n \t} else {\n \t\t/* Representor Rx ring full, drop pkt */\n \t\tvfr_bp->rx_drop_bytes[que] += mbuf->pkt_len;\ndiff --git a/drivers/net/bnxt/bnxt_ring.c b/drivers/net/bnxt/bnxt_ring.c\nindex f83bcaba2..adddf9bc4 100644\n--- a/drivers/net/bnxt/bnxt_ring.c\n+++ b/drivers/net/bnxt/bnxt_ring.c\n@@ -342,7 +342,8 @@ static void bnxt_set_db(struct bnxt *bp,\n \t\t\tstruct bnxt_db_info *db,\n \t\t\tuint32_t ring_type,\n \t\t\tuint32_t map_idx,\n-\t\t\tuint32_t fid)\n+\t\t\tuint32_t fid,\n+\t\t\tuint32_t ring_mask)\n {\n \tif (BNXT_CHIP_P5(bp)) {\n \t\tif (BNXT_PF(bp))\n@@ -381,6 +382,7 @@ static void bnxt_set_db(struct bnxt *bp,\n \t\t}\n \t\tdb->db_64 = false;\n \t}\n+\tdb->db_ring_mask = ring_mask;\n }\n \n static int bnxt_alloc_cmpl_ring(struct bnxt *bp, int queue_index,\n@@ -409,9 +411,9 @@ static int bnxt_alloc_cmpl_ring(struct bnxt *bp, int queue_index,\n \tif (rc)\n \t\treturn rc;\n \n-\tcpr->cp_cons = 0;\n+\tcpr->cp_raw_cons = 0;\n \tbnxt_set_db(bp, &cpr->cp_db, ring_type, cp_ring_index,\n-\t\t    cp_ring->fw_ring_id);\n+\t\t    cp_ring->fw_ring_id, cp_ring->ring_mask);\n \tbnxt_db_cq(cpr);\n \n \treturn 0;\n@@ -472,7 +474,7 @@ int bnxt_alloc_rxtx_nq_ring(struct bnxt *bp)\n \t}\n \n \tbnxt_set_db(bp, &nqr->cp_db, ring_type, ring_index,\n-\t\t    ring->fw_ring_id);\n+\t\t    ring->fw_ring_id, ring->ring_mask);\n \tbnxt_db_nq(nqr);\n \n \tbp->rxtx_nq_ring = nqr;\n@@ -515,11 +517,12 @@ static int bnxt_alloc_rx_ring(struct bnxt *bp, int queue_index)\n \tif (rc)\n \t\treturn rc;\n \n-\trxr->rx_prod = 0;\n+\trxr->rx_raw_prod = 0;\n \tif (BNXT_HAS_RING_GRPS(bp))\n \t\tbp->grp_info[queue_index].rx_fw_ring_id = ring->fw_ring_id;\n-\tbnxt_set_db(bp, &rxr->rx_db, ring_type, queue_index, ring->fw_ring_id);\n-\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n+\tbnxt_set_db(bp, &rxr->rx_db, ring_type, queue_index, ring->fw_ring_id,\n+\t\t    ring->ring_mask);\n+\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n \n \treturn 0;\n }\n@@ -551,11 +554,12 @@ static int bnxt_alloc_rx_agg_ring(struct bnxt *bp, int queue_index)\n \tif (rc)\n \t\treturn rc;\n \n-\trxr->ag_prod = 0;\n+\trxr->ag_raw_prod = 0;\n \tif (BNXT_HAS_RING_GRPS(bp))\n \t\tbp->grp_info[queue_index].ag_fw_ring_id = ring->fw_ring_id;\n-\tbnxt_set_db(bp, &rxr->ag_db, ring_type, map_idx, ring->fw_ring_id);\n-\tbnxt_db_write(&rxr->ag_db, rxr->ag_prod);\n+\tbnxt_set_db(bp, &rxr->ag_db, ring_type, map_idx, ring->fw_ring_id,\n+\t\t    ring->ring_mask);\n+\tbnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);\n \n \treturn 0;\n }\n@@ -604,8 +608,8 @@ int bnxt_alloc_hwrm_rx_ring(struct bnxt *bp, int queue_index)\n \t\t\trc = -ENOMEM;\n \t\t\tgoto err_out;\n \t\t}\n-\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n-\t\tbnxt_db_write(&rxr->ag_db, rxr->ag_prod);\n+\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n+\t\tbnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);\n \t}\n \trxq->index = queue_index;\n #if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)\n@@ -710,8 +714,8 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)\n \t\t\tbnxt_rx_queue_release_op(rxq);\n \t\t\treturn -ENOMEM;\n \t\t}\n-\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n-\t\tbnxt_db_write(&rxr->ag_db, rxr->ag_prod);\n+\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n+\t\tbnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);\n \t\trxq->index = i;\n #if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64)\n \t\tbnxt_rxq_vec_setup(rxq);\n@@ -744,7 +748,8 @@ int bnxt_alloc_hwrm_rings(struct bnxt *bp)\n \t\tif (rc)\n \t\t\tgoto err_out;\n \n-\t\tbnxt_set_db(bp, &txr->tx_db, ring_type, i, ring->fw_ring_id);\n+\t\tbnxt_set_db(bp, &txr->tx_db, ring_type, i, ring->fw_ring_id,\n+\t\t\t    ring->ring_mask);\n \t\ttxq->index = idx;\n \t\tbnxt_hwrm_set_ring_coal(bp, &coal, cp_ring->fw_ring_id);\n \t}\n@@ -777,10 +782,10 @@ int bnxt_alloc_async_cp_ring(struct bnxt *bp)\n \tif (rc)\n \t\treturn rc;\n \n-\tcpr->cp_cons = 0;\n+\tcpr->cp_raw_cons = 0;\n \tcpr->valid = 0;\n \tbnxt_set_db(bp, &cpr->cp_db, ring_type, 0,\n-\t\t    cp_ring->fw_ring_id);\n+\t\t    cp_ring->fw_ring_id, cp_ring->ring_mask);\n \n \tif (BNXT_HAS_NQ(bp))\n \t\tbnxt_db_nq(cpr);\ndiff --git a/drivers/net/bnxt/bnxt_ring.h b/drivers/net/bnxt/bnxt_ring.h\nindex 0a4685d16..49ae5c3c6 100644\n--- a/drivers/net/bnxt/bnxt_ring.h\n+++ b/drivers/net/bnxt/bnxt_ring.h\n@@ -10,8 +10,9 @@\n \n #include <rte_memory.h>\n \n-#define RING_ADV(ring, idx, n)\t\t(((idx) + (n)) & (ring)->ring_mask)\n-#define RING_NEXT(ring, idx)\t\tRING_ADV(ring, idx, 1)\n+#define RING_ADV(idx, n)\t\t((idx) + (n))\n+#define RING_NEXT(idx)\t\t\tRING_ADV(idx, 1)\n+#define RING_IDX(ring, idx)\t\t((idx) & (ring)->ring_mask)\n \n #define DB_IDX_MASK\t\t\t\t\t\t0xffffff\n #define DB_IDX_VALID\t\t\t\t\t\t(0x1 << 26)\n@@ -82,38 +83,51 @@ void bnxt_free_rxtx_nq_ring(struct bnxt *bp);\n \n static inline void bnxt_db_write(struct bnxt_db_info *db, uint32_t idx)\n {\n-\tif (db->db_64)\n-\t\trte_write64(db->db_key64 | idx, db->doorbell);\n-\telse\n-\t\trte_write32(db->db_key32 | idx, db->doorbell);\n+\tuint32_t db_idx = DB_RING_IDX(db, idx);\n+\tvoid *doorbell = db->doorbell;\n+\n+\tif (db->db_64) {\n+\t\tuint64_t key_idx = db->db_key64 | db_idx;\n+\n+\t\trte_write64(key_idx, doorbell);\n+\t} else {\n+\t\tuint32_t key_idx = db->db_key32 | db_idx;\n+\n+\t\trte_write32(key_idx, doorbell);\n+\t}\n }\n \n /* Ring an NQ doorbell and disable interrupts for the ring. */\n static inline void bnxt_db_nq(struct bnxt_cp_ring_info *cpr)\n {\n+\tuint32_t db_idx = DB_RING_IDX(&cpr->cp_db, cpr->cp_raw_cons);\n+\tuint64_t key_idx = cpr->cp_db.db_key64 | DBR_TYPE_NQ | db_idx;\n+\tvoid *doorbell = cpr->cp_db.doorbell;\n+\n+\n \tif (unlikely(!cpr->cp_db.db_64))\n \t\treturn;\n \n-\trte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ |\n-\t\t    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),\n-\t\t    cpr->cp_db.doorbell);\n+\trte_write64(key_idx, doorbell);\n }\n \n /* Ring an NQ doorbell and enable interrupts for the ring. */\n static inline void bnxt_db_nq_arm(struct bnxt_cp_ring_info *cpr)\n {\n+\tuint32_t db_idx = DB_RING_IDX(&cpr->cp_db, cpr->cp_raw_cons);\n+\tuint64_t key_idx = cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM | db_idx;\n+\tvoid *doorbell = cpr->cp_db.doorbell;\n+\n \tif (unlikely(!cpr->cp_db.db_64))\n \t\treturn;\n \n-\trte_write64(cpr->cp_db.db_key64 | DBR_TYPE_NQ_ARM |\n-\t\t    RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons),\n-\t\t    cpr->cp_db.doorbell);\n+\trte_write64(key_idx, doorbell);\n }\n \n static inline void bnxt_db_cq(struct bnxt_cp_ring_info *cpr)\n {\n \tstruct bnxt_db_info *db = &cpr->cp_db;\n-\tuint32_t idx = RING_CMP(cpr->cp_ring_struct, cpr->cp_raw_cons);\n+\tuint32_t idx = DB_RING_IDX(&cpr->cp_db, cpr->cp_raw_cons);\n \n \tif (db->db_64) {\n \t\tuint64_t key_idx = db->db_key64 | idx;\ndiff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex e9c4fffed..445e6150d 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -39,12 +39,15 @@ static inline struct rte_mbuf *__bnxt_alloc_rx_data(struct rte_mempool *mb)\n \n static inline int bnxt_alloc_rx_data(struct bnxt_rx_queue *rxq,\n \t\t\t\t     struct bnxt_rx_ring_info *rxr,\n-\t\t\t\t     uint16_t prod)\n+\t\t\t\t     uint16_t raw_prod)\n {\n-\tstruct rx_prod_pkt_bd *rxbd = &rxr->rx_desc_ring[prod];\n-\tstruct rte_mbuf **rx_buf = &rxr->rx_buf_ring[prod];\n+\tuint16_t prod = RING_IDX(rxr->rx_ring_struct, raw_prod);\n+\tstruct rx_prod_pkt_bd *rxbd;\n+\tstruct rte_mbuf **rx_buf;\n \tstruct rte_mbuf *mbuf;\n \n+\trxbd = &rxr->rx_desc_ring[prod];\n+\trx_buf = &rxr->rx_buf_ring[prod];\n \tmbuf = __bnxt_alloc_rx_data(rxq->mb_pool);\n \tif (!mbuf) {\n \t\trte_atomic64_inc(&rxq->rx_mbuf_alloc_fail);\n@@ -61,12 +64,15 @@ static inline int bnxt_alloc_rx_data(struct bnxt_rx_queue *rxq,\n \n static inline int bnxt_alloc_ag_data(struct bnxt_rx_queue *rxq,\n \t\t\t\t     struct bnxt_rx_ring_info *rxr,\n-\t\t\t\t     uint16_t prod)\n+\t\t\t\t     uint16_t raw_prod)\n {\n-\tstruct rx_prod_pkt_bd *rxbd = &rxr->ag_desc_ring[prod];\n-\tstruct rte_mbuf **rx_buf = &rxr->ag_buf_ring[prod];\n+\tuint16_t prod = RING_IDX(rxr->ag_ring_struct, raw_prod);\n+\tstruct rx_prod_pkt_bd *rxbd;\n+\tstruct rte_mbuf **rx_buf;\n \tstruct rte_mbuf *mbuf;\n \n+\trxbd = &rxr->ag_desc_ring[prod];\n+\trx_buf = &rxr->ag_buf_ring[prod];\n \tif (rxbd == NULL) {\n \t\tPMD_DRV_LOG(ERR, \"Jumbo Frame. rxbd is NULL\\n\");\n \t\treturn -EINVAL;\n@@ -94,10 +100,11 @@ static inline int bnxt_alloc_ag_data(struct bnxt_rx_queue *rxq,\n static inline void bnxt_reuse_rx_mbuf(struct bnxt_rx_ring_info *rxr,\n \t\t\t       struct rte_mbuf *mbuf)\n {\n-\tuint16_t prod = RING_NEXT(rxr->rx_ring_struct, rxr->rx_prod);\n+\tuint16_t prod, raw_prod = RING_NEXT(rxr->rx_raw_prod);\n \tstruct rte_mbuf **prod_rx_buf;\n \tstruct rx_prod_pkt_bd *prod_bd;\n \n+\tprod = RING_IDX(rxr->rx_ring_struct, raw_prod);\n \tprod_rx_buf = &rxr->rx_buf_ring[prod];\n \n \tRTE_ASSERT(*prod_rx_buf == NULL);\n@@ -109,7 +116,7 @@ static inline void bnxt_reuse_rx_mbuf(struct bnxt_rx_ring_info *rxr,\n \n \tprod_bd->address = rte_cpu_to_le_64(rte_mbuf_data_iova_default(mbuf));\n \n-\trxr->rx_prod = prod;\n+\trxr->rx_raw_prod = raw_prod;\n }\n \n static inline\n@@ -119,7 +126,7 @@ struct rte_mbuf *bnxt_consume_rx_buf(struct bnxt_rx_ring_info *rxr,\n \tstruct rte_mbuf **cons_rx_buf;\n \tstruct rte_mbuf *mbuf;\n \n-\tcons_rx_buf = &rxr->rx_buf_ring[cons];\n+\tcons_rx_buf = &rxr->rx_buf_ring[RING_IDX(rxr->rx_ring_struct, cons)];\n \tRTE_ASSERT(*cons_rx_buf != NULL);\n \tmbuf = *cons_rx_buf;\n \t*cons_rx_buf = NULL;\n@@ -175,7 +182,7 @@ static void bnxt_tpa_start(struct bnxt_rx_queue *rxq,\n \t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n \n \t/* recycle next mbuf */\n-\tdata_cons = RING_NEXT(rxr->rx_ring_struct, data_cons);\n+\tdata_cons = RING_NEXT(data_cons);\n \tbnxt_reuse_rx_mbuf(rxr, bnxt_consume_rx_buf(rxr, data_cons));\n }\n \n@@ -198,18 +205,20 @@ static int bnxt_agg_bufs_valid(struct bnxt_cp_ring_info *cpr,\n static int bnxt_prod_ag_mbuf(struct bnxt_rx_queue *rxq)\n {\n \tstruct bnxt_rx_ring_info *rxr = rxq->rx_ring;\n-\tuint16_t next = RING_NEXT(rxr->ag_ring_struct, rxr->ag_prod);\n+\tuint16_t raw_next = RING_NEXT(rxr->ag_raw_prod);\n+\tuint16_t bmap_next = RING_IDX(rxr->ag_ring_struct, raw_next);\n \n \t/* TODO batch allocation for better performance */\n-\twhile (rte_bitmap_get(rxr->ag_bitmap, next)) {\n-\t\tif (unlikely(bnxt_alloc_ag_data(rxq, rxr, next))) {\n-\t\t\tPMD_DRV_LOG(ERR,\n-\t\t\t\t\"agg mbuf alloc failed: prod=0x%x\\n\", next);\n+\twhile (rte_bitmap_get(rxr->ag_bitmap, bmap_next)) {\n+\t\tif (unlikely(bnxt_alloc_ag_data(rxq, rxr, raw_next))) {\n+\t\t\tPMD_DRV_LOG(ERR, \"agg mbuf alloc failed: prod=0x%x\\n\",\n+\t\t\t\t    raw_next);\n \t\t\tbreak;\n \t\t}\n-\t\trte_bitmap_clear(rxr->ag_bitmap, next);\n-\t\trxr->ag_prod = next;\n-\t\tnext = RING_NEXT(rxr->ag_ring_struct, next);\n+\t\trte_bitmap_clear(rxr->ag_bitmap, bmap_next);\n+\t\trxr->ag_raw_prod = raw_next;\n+\t\traw_next = RING_NEXT(raw_next);\n+\t\tbmap_next = RING_IDX(rxr->ag_ring_struct, raw_next);\n \t}\n \n \treturn 0;\n@@ -666,7 +675,7 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \tstruct rx_pkt_cmpl *rxcmp;\n \tstruct rx_pkt_cmpl_hi *rxcmp1;\n \tuint32_t tmp_raw_cons = *raw_cons;\n-\tuint16_t cons, prod, cp_cons =\n+\tuint16_t cons, raw_prod, cp_cons =\n \t    RING_CMP(cpr->cp_ring_struct, tmp_raw_cons);\n \tstruct rte_mbuf *mbuf;\n \tint rc = 0;\n@@ -726,7 +735,7 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \tif (agg_buf && !bnxt_agg_bufs_valid(cpr, agg_buf, tmp_raw_cons))\n \t\treturn -EBUSY;\n \n-\tprod = rxr->rx_prod;\n+\traw_prod = rxr->rx_raw_prod;\n \n \tcons = rxcmp->opaque;\n \tmbuf = bnxt_consume_rx_buf(rxr, cons);\n@@ -786,13 +795,14 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \t * calls in favour of a tight loop with the same function being called\n \t * in it.\n \t */\n-\tprod = RING_NEXT(rxr->rx_ring_struct, prod);\n-\tif (bnxt_alloc_rx_data(rxq, rxr, prod)) {\n-\t\tPMD_DRV_LOG(ERR, \"mbuf alloc failed with prod=0x%x\\n\", prod);\n+\traw_prod = RING_NEXT(raw_prod);\n+\tif (bnxt_alloc_rx_data(rxq, rxr, raw_prod)) {\n+\t\tPMD_DRV_LOG(ERR, \"mbuf alloc failed with prod=0x%x\\n\",\n+\t\t\t    raw_prod);\n \t\trc = -ENOMEM;\n \t\tgoto rx;\n \t}\n-\trxr->rx_prod = prod;\n+\trxr->rx_raw_prod = raw_prod;\n \n \tif (BNXT_TRUFLOW_EN(bp) && (BNXT_VF_IS_TRUSTED(bp) || BNXT_PF(bp)) &&\n \t    vfr_flag) {\n@@ -826,13 +836,13 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tstruct bnxt_rx_queue *rxq = rx_queue;\n \tstruct bnxt_cp_ring_info *cpr = rxq->cp_ring;\n \tstruct bnxt_rx_ring_info *rxr = rxq->rx_ring;\n+\tuint16_t rx_raw_prod = rxr->rx_raw_prod;\n+\tuint16_t ag_raw_prod = rxr->ag_raw_prod;\n \tuint32_t raw_cons = cpr->cp_raw_cons;\n \tuint32_t cons;\n \tint nb_rx_pkts = 0;\n \tint nb_rep_rx_pkts = 0;\n \tstruct rx_pkt_cmpl *rxcmp;\n-\tuint16_t prod = rxr->rx_prod;\n-\tuint16_t ag_prod = rxr->ag_prod;\n \tint rc = 0;\n \tbool evt = false;\n \n@@ -850,8 +860,8 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t */\n \twhile (unlikely(rxq->rxrearm_nb)) {\n \t\tif (!bnxt_alloc_rx_data(rxq, rxr, rxq->rxrearm_start)) {\n-\t\t\trxr->rx_prod = rxq->rxrearm_start;\n-\t\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n+\t\t\trxr->rx_raw_prod = rxq->rxrearm_start;\n+\t\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n \t\t\trxq->rxrearm_start++;\n \t\t\trxq->rxrearm_nb--;\n \t\t} else {\n@@ -895,7 +905,7 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\t\tbreak;\n \t\t/* Post some Rx buf early in case of larger burst processing */\n \t\tif (nb_rx_pkts == BNXT_RX_POST_THRESH)\n-\t\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n+\t\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n \t}\n \n \tcpr->cp_raw_cons = raw_cons;\n@@ -907,23 +917,27 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\tgoto done;\n \t}\n \n-\tif (prod != rxr->rx_prod)\n-\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n+\trte_compiler_barrier();\n+\tif (rx_raw_prod != rxr->rx_raw_prod)\n+\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n \n+\trte_compiler_barrier();\n \t/* Ring the AGG ring DB */\n-\tif (ag_prod != rxr->ag_prod)\n-\t\tbnxt_db_write(&rxr->ag_db, rxr->ag_prod);\n+\tif (ag_raw_prod != rxr->ag_raw_prod)\n+\t\tbnxt_db_write(&rxr->ag_db, rxr->ag_raw_prod);\n \n \tbnxt_db_cq(cpr);\n \n \t/* Attempt to alloc Rx buf in case of a previous allocation failure. */\n \tif (rc == -ENOMEM) {\n-\t\tint i = RING_NEXT(rxr->rx_ring_struct, prod);\n+\t\tint i = RING_NEXT(rx_raw_prod);\n \t\tint cnt = nb_rx_pkts;\n \n-\t\tfor (; cnt;\n-\t\t\ti = RING_NEXT(rxr->rx_ring_struct, i), cnt--) {\n-\t\t\tstruct rte_mbuf **rx_buf = &rxr->rx_buf_ring[i];\n+\t\tfor (; nb_rx_pkts; i = RING_NEXT(i), cnt--) {\n+\t\t\tstruct rte_mbuf **rx_buf;\n+\t\t\tuint16_t rx_raw_prod = RING_IDX(rxr->rx_ring_struct, i);\n+\n+\t\t\trx_buf = &rxr->rx_buf_ring[rx_raw_prod];\n \n \t\t\t/* Buffer already allocated for this index. */\n \t\t\tif (*rx_buf != NULL && *rx_buf != &rxq->fake_mbuf)\n@@ -931,8 +945,8 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,\n \n \t\t\t/* This slot is empty. Alloc buffer for Rx */\n \t\t\tif (!bnxt_alloc_rx_data(rxq, rxr, i)) {\n-\t\t\t\trxr->rx_prod = i;\n-\t\t\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_prod);\n+\t\t\t\trxr->rx_raw_prod = i;\n+\t\t\t\tbnxt_db_write(&rxr->rx_db, rxr->rx_raw_prod);\n \t\t\t} else {\n \t\t\t\tPMD_DRV_LOG(ERR, \"Alloc  mbuf failed\\n\");\n \t\t\t\tbreak;\n@@ -1100,7 +1114,7 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)\n {\n \tstruct bnxt_rx_ring_info *rxr;\n \tstruct bnxt_ring *ring;\n-\tuint32_t prod, type;\n+\tuint32_t raw_prod, type;\n \tunsigned int i;\n \tuint16_t size;\n \n@@ -1119,18 +1133,18 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)\n \tring = rxr->rx_ring_struct;\n \tbnxt_init_rxbds(ring, type, size);\n \n-\tprod = rxr->rx_prod;\n+\traw_prod = rxr->rx_raw_prod;\n \tfor (i = 0; i < ring->ring_size; i++) {\n \t\tif (unlikely(!rxr->rx_buf_ring[i])) {\n-\t\t\tif (bnxt_alloc_rx_data(rxq, rxr, prod) != 0) {\n+\t\t\tif (bnxt_alloc_rx_data(rxq, rxr, raw_prod) != 0) {\n \t\t\t\tPMD_DRV_LOG(WARNING,\n \t\t\t\t\t    \"init'ed rx ring %d with %d/%d mbufs only\\n\",\n \t\t\t\t\t    rxq->queue_id, i, ring->ring_size);\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n-\t\trxr->rx_prod = prod;\n-\t\tprod = RING_NEXT(rxr->rx_ring_struct, prod);\n+\t\trxr->rx_raw_prod = raw_prod;\n+\t\traw_prod = RING_NEXT(raw_prod);\n \t}\n \n \t/* Initialize dummy mbuf pointers for vector mode rx. */\n@@ -1142,19 +1156,19 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)\n \tring = rxr->ag_ring_struct;\n \ttype = RX_PROD_AGG_BD_TYPE_RX_PROD_AGG;\n \tbnxt_init_rxbds(ring, type, size);\n-\tprod = rxr->ag_prod;\n+\traw_prod = rxr->ag_raw_prod;\n \n \tfor (i = 0; i < ring->ring_size; i++) {\n \t\tif (unlikely(!rxr->ag_buf_ring[i])) {\n-\t\t\tif (bnxt_alloc_ag_data(rxq, rxr, prod) != 0) {\n+\t\t\tif (bnxt_alloc_ag_data(rxq, rxr, raw_prod) != 0) {\n \t\t\t\tPMD_DRV_LOG(WARNING,\n \t\t\t\t\t    \"init'ed AG ring %d with %d/%d mbufs only\\n\",\n \t\t\t\t\t    rxq->queue_id, i, ring->ring_size);\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n-\t\trxr->ag_prod = prod;\n-\t\tprod = RING_NEXT(rxr->ag_ring_struct, prod);\n+\t\trxr->ag_raw_prod = raw_prod;\n+\t\traw_prod = RING_NEXT(raw_prod);\n \t}\n \tPMD_DRV_LOG(DEBUG, \"AGG Done!\\n\");\n \ndiff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h\nindex 2a53cf87b..af6ff0972 100644\n--- a/drivers/net/bnxt/bnxt_rxr.h\n+++ b/drivers/net/bnxt/bnxt_rxr.h\n@@ -50,8 +50,8 @@ struct bnxt_tpa_info {\n };\n \n struct bnxt_rx_ring_info {\n-\tuint16_t\t\trx_prod;\n-\tuint16_t\t\tag_prod;\n+\tuint16_t\t\trx_raw_prod;\n+\tuint16_t\t\tag_raw_prod;\n \tuint16_t                rx_cons; /* Needed for representor */\n \tstruct bnxt_db_info     rx_db;\n \tstruct bnxt_db_info     ag_db;\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_common.h b/drivers/net/bnxt/bnxt_rxtx_vec_common.h\nindex d540e9eee..8a7772a7e 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_common.h\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_common.h\n@@ -103,23 +103,23 @@ static inline void\n bnxt_tx_cmp_vec_fast(struct bnxt_tx_queue *txq, int nr_pkts)\n {\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n-\tuint32_t ring_mask = txr->tx_ring_struct->ring_mask;\n \tstruct rte_mbuf **free = txq->free;\n-\tuint16_t cons = txr->tx_cons;\n+\tuint16_t cons, raw_cons = txr->tx_raw_cons;\n \tunsigned int blk = 0;\n+\tuint32_t ring_mask = txr->tx_ring_struct->ring_mask;\n \n \twhile (nr_pkts--) {\n \t\tstruct bnxt_sw_tx_bd *tx_buf;\n \n+\t\tcons = raw_cons++ & ring_mask;\n \t\ttx_buf = &txr->tx_buf_ring[cons];\n-\t\tcons = (cons + 1) & ring_mask;\n \t\tfree[blk++] = tx_buf->mbuf;\n \t\ttx_buf->mbuf = NULL;\n \t}\n \tif (blk)\n \t\trte_mempool_put_bulk(free[0]->pool, (void **)free, blk);\n \n-\ttxr->tx_cons = cons;\n+\ttxr->tx_raw_cons = raw_cons;\n }\n \n static inline void\n@@ -127,7 +127,7 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)\n {\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n \tstruct rte_mbuf **free = txq->free;\n-\tuint16_t cons = txr->tx_cons;\n+\tuint16_t cons, raw_cons = txr->tx_raw_cons;\n \tunsigned int blk = 0;\n \tuint32_t ring_mask = txr->tx_ring_struct->ring_mask;\n \n@@ -135,8 +135,8 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)\n \t\tstruct bnxt_sw_tx_bd *tx_buf;\n \t\tstruct rte_mbuf *mbuf;\n \n+\t\tcons = raw_cons++ & ring_mask;\n \t\ttx_buf = &txr->tx_buf_ring[cons];\n-\t\tcons = (cons + 1) & ring_mask;\n \t\tmbuf = rte_pktmbuf_prefree_seg(tx_buf->mbuf);\n \t\tif (unlikely(mbuf == NULL))\n \t\t\tcontinue;\n@@ -151,6 +151,6 @@ bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)\n \tif (blk)\n \t\trte_mempool_put_bulk(free[0]->pool, (void **)free, blk);\n \n-\ttxr->tx_cons = cons;\n+\ttxr->tx_raw_cons = raw_cons;\n }\n #endif /* _BNXT_RXTX_VEC_COMMON_H_ */\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\nindex de1d96570..81f9a7da2 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n@@ -295,8 +295,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \n out:\n \tif (nb_rx_pkts) {\n-\t\trxr->rx_prod =\n-\t\t\tRING_ADV(rxr->rx_ring_struct, rxr->rx_prod, nb_rx_pkts);\n+\t\trxr->rx_raw_prod = RING_ADV(rxr->rx_raw_prod, nb_rx_pkts);\n \n \t\trxq->rxrearm_nb += nb_rx_pkts;\n \t\tcpr->cp_raw_cons += 2 * nb_rx_pkts;\n@@ -353,7 +352,7 @@ bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n {\n \tstruct bnxt_tx_queue *txq = tx_queue;\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n-\tuint16_t prod = txr->tx_prod;\n+\tuint16_t tx_prod, tx_raw_prod = txr->tx_raw_prod;\n \tstruct rte_mbuf *tx_mbuf;\n \tstruct tx_bd_long *txbd = NULL;\n \tstruct bnxt_sw_tx_bd *tx_buf;\n@@ -370,16 +369,17 @@ bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\ttx_mbuf = *tx_pkts++;\n \t\trte_prefetch0(tx_mbuf);\n \n-\t\ttx_buf = &txr->tx_buf_ring[prod];\n+\t\ttx_prod = RING_IDX(txr->tx_ring_struct, tx_raw_prod);\n+\t\ttx_buf = &txr->tx_buf_ring[tx_prod];\n \t\ttx_buf->mbuf = tx_mbuf;\n \t\ttx_buf->nr_bds = 1;\n \n-\t\ttxbd = &txr->tx_desc_ring[prod];\n+\t\ttxbd = &txr->tx_desc_ring[tx_prod];\n \t\ttxbd->address = tx_mbuf->buf_iova + tx_mbuf->data_off;\n \t\ttxbd->len = tx_mbuf->data_len;\n \t\ttxbd->flags_type = bnxt_xmit_flags_len(tx_mbuf->data_len,\n \t\t\t\t\t\t       TX_BD_FLAGS_NOCMPL);\n-\t\tprod = RING_NEXT(txr->tx_ring_struct, prod);\n+\t\ttx_raw_prod = RING_NEXT(tx_raw_prod);\n \t\tto_send--;\n \t}\n \n@@ -390,9 +390,9 @@ bnxt_xmit_fixed_burst_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t}\n \n \trte_compiler_barrier();\n-\tbnxt_db_write(&txr->tx_db, prod);\n+\tbnxt_db_write(&txr->tx_db, tx_raw_prod);\n \n-\ttxr->tx_prod = prod;\n+\ttxr->tx_raw_prod = tx_raw_prod;\n \n \treturn nb_pkts;\n }\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex e12bf8bb7..ce92629ab 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -277,8 +277,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \n out:\n \tif (nb_rx_pkts) {\n-\t\trxr->rx_prod =\n-\t\t\tRING_ADV(rxr->rx_ring_struct, rxr->rx_prod, nb_rx_pkts);\n+\t\trxr->rx_raw_prod = RING_ADV(rxr->rx_raw_prod, nb_rx_pkts);\n \n \t\trxq->rxrearm_nb += nb_rx_pkts;\n \t\tcpr->cp_raw_cons += 2 * nb_rx_pkts;\n@@ -351,11 +350,12 @@ bnxt_xmit_fixed_burst_vec(struct bnxt_tx_queue *txq, struct rte_mbuf **tx_pkts,\n \t\t\t  uint16_t nb_pkts)\n {\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n-\tuint16_t tx_prod = txr->tx_prod;\n+\tuint16_t tx_prod, tx_raw_prod = txr->tx_raw_prod;\n \tstruct tx_bd_long *txbd;\n \tstruct bnxt_sw_tx_bd *tx_buf;\n \tuint16_t to_send;\n \n+\ttx_prod = RING_IDX(txr->tx_ring_struct, tx_raw_prod);\n \ttxbd = &txr->tx_desc_ring[tx_prod];\n \ttx_buf = &txr->tx_buf_ring[tx_prod];\n \n@@ -395,10 +395,10 @@ bnxt_xmit_fixed_burst_vec(struct bnxt_tx_queue *txq, struct rte_mbuf **tx_pkts,\n \ttxbd[-1].opaque = nb_pkts;\n \ttxbd[-1].flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL;\n \n-\ttx_prod = RING_ADV(txr->tx_ring_struct, tx_prod, nb_pkts);\n-\tbnxt_db_write(&txr->tx_db, tx_prod);\n+\ttx_raw_prod += nb_pkts;\n+\tbnxt_db_write(&txr->tx_db, tx_raw_prod);\n \n-\ttxr->tx_prod = tx_prod;\n+\ttxr->tx_raw_prod = tx_raw_prod;\n \n \treturn nb_pkts;\n }\n@@ -435,8 +435,8 @@ bnxt_xmit_pkts_vec(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\t * Ensure that a ring wrap does not occur within a call to\n \t\t * bnxt_xmit_fixed_burst_vec().\n \t\t */\n-\t\tnum = RTE_MIN(num,\n-\t\t\t      ring_size - (txr->tx_prod & (ring_size - 1)));\n+\t\tnum = RTE_MIN(num, ring_size -\n+\t\t\t\t   (txr->tx_raw_prod & (ring_size - 1)));\n \t\tret = bnxt_xmit_fixed_burst_vec(txq, &tx_pkts[nb_sent], num);\n \t\tnb_sent += ret;\n \t\tnb_pkts -= ret;\ndiff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c\nindex fb358d6f1..9cf0126d2 100644\n--- a/drivers/net/bnxt/bnxt_txr.c\n+++ b/drivers/net/bnxt/bnxt_txr.c\n@@ -110,12 +110,14 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,\n \t\t\t\tstruct tx_bd_long **last_txbd)\n {\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tstruct bnxt_ring *ring = txr->tx_ring_struct;\n \tuint32_t outer_tpid_bd = 0;\n \tstruct tx_bd_long *txbd;\n \tstruct tx_bd_long_hi *txbd1 = NULL;\n \tuint32_t vlan_tag_flags;\n \tbool long_bd = false;\n \tunsigned short nr_bds = 0;\n+\tuint16_t prod;\n \tstruct rte_mbuf *m_seg;\n \tstruct bnxt_sw_tx_bd *tx_buf;\n \tstatic const uint32_t lhint_arr[4] = {\n@@ -168,11 +170,12 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,\n \t/* Check non zero data_len */\n \tRTE_VERIFY(tx_pkt->data_len);\n \n-\ttx_buf = &txr->tx_buf_ring[txr->tx_prod];\n+\tprod = RING_IDX(ring, txr->tx_raw_prod);\n+\ttx_buf = &txr->tx_buf_ring[prod];\n \ttx_buf->mbuf = tx_pkt;\n \ttx_buf->nr_bds = nr_bds;\n \n-\ttxbd = &txr->tx_desc_ring[txr->tx_prod];\n+\ttxbd = &txr->tx_desc_ring[prod];\n \ttxbd->opaque = *coal_pkts;\n \ttxbd->flags_type = nr_bds << TX_BD_LONG_FLAGS_BD_CNT_SFT;\n \ttxbd->flags_type |= TX_BD_SHORT_FLAGS_COAL_NOW;\n@@ -210,10 +213,10 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,\n \t\t\t\t\tTX_BD_LONG_CFA_META_VLAN_TPID_TPID8100;\n \t\t}\n \n-\t\ttxr->tx_prod = RING_NEXT(txr->tx_ring_struct, txr->tx_prod);\n+\t\ttxr->tx_raw_prod = RING_NEXT(txr->tx_raw_prod);\n \n-\t\ttxbd1 = (struct tx_bd_long_hi *)\n-\t\t\t\t\t&txr->tx_desc_ring[txr->tx_prod];\n+\t\tprod = RING_IDX(ring, txr->tx_raw_prod);\n+\t\ttxbd1 = (struct tx_bd_long_hi *)&txr->tx_desc_ring[prod];\n \t\ttxbd1->lflags = 0;\n \t\ttxbd1->cfa_meta = vlan_tag_flags;\n \t\t/* Legacy tx_bd_long_hi->mss =\n@@ -318,11 +321,13 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,\n \twhile (m_seg) {\n \t\t/* Check non zero data_len */\n \t\tRTE_VERIFY(m_seg->data_len);\n-\t\ttxr->tx_prod = RING_NEXT(txr->tx_ring_struct, txr->tx_prod);\n-\t\ttx_buf = &txr->tx_buf_ring[txr->tx_prod];\n+\t\ttxr->tx_raw_prod = RING_NEXT(txr->tx_raw_prod);\n+\n+\t\tprod = RING_IDX(ring, txr->tx_raw_prod);\n+\t\ttx_buf = &txr->tx_buf_ring[prod];\n \t\ttx_buf->mbuf = m_seg;\n \n-\t\ttxbd = &txr->tx_desc_ring[txr->tx_prod];\n+\t\ttxbd = &txr->tx_desc_ring[prod];\n \t\ttxbd->address = rte_cpu_to_le_64(rte_mbuf_data_iova(m_seg));\n \t\ttxbd->flags_type = TX_BD_SHORT_TYPE_TX_BD_SHORT;\n \t\ttxbd->len = m_seg->data_len;\n@@ -332,7 +337,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,\n \n \ttxbd->flags_type |= TX_BD_LONG_FLAGS_PACKET_END;\n \n-\ttxr->tx_prod = RING_NEXT(txr->tx_ring_struct, txr->tx_prod);\n+\ttxr->tx_raw_prod = RING_NEXT(txr->tx_raw_prod);\n \n \treturn 0;\n }\n@@ -344,8 +349,9 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt,\n static void bnxt_tx_cmp_fast(struct bnxt_tx_queue *txq, int nr_pkts)\n {\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tstruct bnxt_ring *ring = txr->tx_ring_struct;\n \tstruct rte_mbuf **free = txq->free;\n-\tuint16_t cons = txr->tx_cons;\n+\tuint16_t raw_cons = txr->tx_raw_cons;\n \tunsigned int blk = 0;\n \tint i, j;\n \n@@ -353,7 +359,7 @@ static void bnxt_tx_cmp_fast(struct bnxt_tx_queue *txq, int nr_pkts)\n \t\tstruct bnxt_sw_tx_bd *tx_buf;\n \t\tunsigned short nr_bds;\n \n-\t\ttx_buf = &txr->tx_buf_ring[cons];\n+\t\ttx_buf = &txr->tx_buf_ring[RING_IDX(ring, raw_cons)];\n \t\tnr_bds = tx_buf->nr_bds;\n \t\tfor (j = 0; j < nr_bds; j++) {\n \t\t\tif (tx_buf->mbuf) {\n@@ -361,35 +367,38 @@ static void bnxt_tx_cmp_fast(struct bnxt_tx_queue *txq, int nr_pkts)\n \t\t\t\tfree[blk++] = tx_buf->mbuf;\n \t\t\t\ttx_buf->mbuf = NULL;\n \t\t\t}\n-\t\t\tcons = RING_NEXT(txr->tx_ring_struct, cons);\n-\t\t\ttx_buf = &txr->tx_buf_ring[cons];\n+\t\t\traw_cons = RING_NEXT(raw_cons);\n+\t\t\ttx_buf = &txr->tx_buf_ring[RING_IDX(ring, raw_cons)];\n \t\t}\n \t}\n \tif (blk)\n \t\trte_mempool_put_bulk(free[0]->pool, (void *)free, blk);\n \n-\ttxr->tx_cons = cons;\n+\ttxr->tx_raw_cons = raw_cons;\n }\n \n static void bnxt_tx_cmp(struct bnxt_tx_queue *txq, int nr_pkts)\n {\n \tstruct bnxt_tx_ring_info *txr = txq->tx_ring;\n+\tstruct bnxt_ring *ring = txr->tx_ring_struct;\n \tstruct rte_mempool *pool = NULL;\n \tstruct rte_mbuf **free = txq->free;\n-\tuint16_t cons = txr->tx_cons;\n+\tuint16_t raw_cons = txr->tx_raw_cons;\n \tunsigned int blk = 0;\n \tint i, j;\n \n \tfor (i = 0; i < nr_pkts; i++) {\n \t\tstruct rte_mbuf *mbuf;\n-\t\tstruct bnxt_sw_tx_bd *tx_buf = &txr->tx_buf_ring[cons];\n-\t\tunsigned short nr_bds = tx_buf->nr_bds;\n+\t\tstruct bnxt_sw_tx_bd *tx_buf;\n+\t\tunsigned short nr_bds;\n \n+\t\ttx_buf = &txr->tx_buf_ring[RING_IDX(ring, raw_cons)];\n+\t\tnr_bds = tx_buf->nr_bds;\n \t\tfor (j = 0; j < nr_bds; j++) {\n \t\t\tmbuf = tx_buf->mbuf;\n \t\t\ttx_buf->mbuf = NULL;\n-\t\t\tcons = RING_NEXT(txr->tx_ring_struct, cons);\n-\t\t\ttx_buf = &txr->tx_buf_ring[cons];\n+\t\t\traw_cons = RING_NEXT(raw_cons);\n+\t\t\ttx_buf = &txr->tx_buf_ring[RING_IDX(ring, raw_cons)];\n \t\t\tif (!mbuf)\t/* long_bd's tx_buf ? */\n \t\t\t\tcontinue;\n \n@@ -422,7 +431,7 @@ static void bnxt_tx_cmp(struct bnxt_tx_queue *txq, int nr_pkts)\n \tif (blk)\n \t\trte_mempool_put_bulk(pool, (void *)free, blk);\n \n-\ttxr->tx_cons = cons;\n+\ttxr->tx_raw_cons = raw_cons;\n }\n \n static int bnxt_handle_tx_cp(struct bnxt_tx_queue *txq)\n@@ -504,7 +513,7 @@ uint16_t bnxt_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \tif (likely(nb_tx_pkts)) {\n \t\t/* Request a completion on the last packet */\n \t\tlast_txbd->flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL;\n-\t\tbnxt_db_write(&txq->tx_ring->tx_db, txq->tx_ring->tx_prod);\n+\t\tbnxt_db_write(&txq->tx_ring->tx_db, txq->tx_ring->tx_raw_prod);\n \t}\n \n \treturn nb_tx_pkts;\ndiff --git a/drivers/net/bnxt/bnxt_txr.h b/drivers/net/bnxt/bnxt_txr.h\nindex 3dfc8ef9b..447c68b7d 100644\n--- a/drivers/net/bnxt/bnxt_txr.h\n+++ b/drivers/net/bnxt/bnxt_txr.h\n@@ -12,8 +12,8 @@\n #define BNXT_MIN_PKT_SIZE\t52\n \n struct bnxt_tx_ring_info {\n-\tuint16_t\t\ttx_prod;\n-\tuint16_t\t\ttx_cons;\n+\tuint16_t\t\ttx_raw_prod;\n+\tuint16_t\t\ttx_raw_cons;\n \tstruct bnxt_db_info     tx_db;\n \n \tstruct tx_bd_long\t*tx_desc_ring;\n@@ -31,7 +31,7 @@ struct bnxt_sw_tx_bd {\n \n static inline uint32_t bnxt_tx_bds_in_hw(struct bnxt_tx_queue *txq)\n {\n-\treturn ((txq->tx_ring->tx_prod - txq->tx_ring->tx_cons) &\n+\treturn ((txq->tx_ring->tx_raw_prod - txq->tx_ring->tx_raw_cons) &\n \t\ttxq->tx_ring->tx_ring_struct->ring_mask);\n }\n \n",
    "prefixes": [
        "v3",
        "17/17"
    ]
}