get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77068,
    "url": "http://patches.dpdk.org/api/patches/77068/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200909155302.28656-5-lance.richardson@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": "<20200909155302.28656-5-lance.richardson@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200909155302.28656-5-lance.richardson@broadcom.com",
    "date": "2020-09-09T15:52:57",
    "name": "[04/12] net/bnxt: require async cq for vector mode",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "c87c6ad74ea294f5efb280a23c903e07d82897ef",
    "submitter": {
        "id": 1323,
        "url": "http://patches.dpdk.org/api/people/1323/?format=api",
        "name": "Lance Richardson",
        "email": "lance.richardson@broadcom.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/20200909155302.28656-5-lance.richardson@broadcom.com/mbox/",
    "series": [
        {
            "id": 12060,
            "url": "http://patches.dpdk.org/api/series/12060/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=12060",
            "date": "2020-09-09T15:52:53",
            "name": "net/bnxt: vector PMD improvements",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/12060/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/77068/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77068/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 6C069A04B5;\n\tWed,  9 Sep 2020 17:53:57 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 3492E1C0D7;\n\tWed,  9 Sep 2020 17:53:24 +0200 (CEST)",
            "from mail-pj1-f66.google.com (mail-pj1-f66.google.com\n [209.85.216.66]) by dpdk.org (Postfix) with ESMTP id 3ECB71C10B\n for <dev@dpdk.org>; Wed,  9 Sep 2020 17:53:22 +0200 (CEST)",
            "by mail-pj1-f66.google.com with SMTP id md22so1483058pjb.0\n for <dev@dpdk.org>; Wed, 09 Sep 2020 08:53:22 -0700 (PDT)",
            "from localhost.localdomain ([192.19.231.250])\n by smtp.gmail.com with ESMTPSA id h15sm3188427pfo.23.2020.09.09.08.53.20\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 09 Sep 2020 08:53:20 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references\n :mime-version:content-transfer-encoding;\n bh=y65K0o9d6Wnm++JqpdZXMeZmLP1Yy01AtF4NqRRv82o=;\n b=L0pdMSgHhh30Ub7C/a3+1FfAiJyjDJ8acwX8dL3kRNjd8+DDhltNOxdaWx9k9BgoW8\n PG3Su4WD95TFhPRih1o3uKmlVy4hPjdqJzXDYKCQ/hKJaYbbrTEdPq1r4or4FA5T57cS\n yHTkb+stWO9un9BvigYrwmSM2/YMFz/mF5qEU=",
        "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:cc:subject:date:message-id:in-reply-to\n :references:mime-version:content-transfer-encoding;\n bh=y65K0o9d6Wnm++JqpdZXMeZmLP1Yy01AtF4NqRRv82o=;\n b=RXDHIV5Iqtn0LpxH877iB6OX+vUz4YMuIATUy9HuaBWVelrECa4+gmr4Ulk9XL1vYQ\n oqMj2+cP4Dg4VMt3+wAcOY8ZRhNjI7E1KaNJIlcLvDm25n8uVxirv9GcJSHzCZ9PVgDS\n Ri+IZJfyOaMhRz+VDjl6STbxmjGKxphE8KRpTHQEl1Z4YtpbLDZBE/V8y8tPVogfnw2f\n V1GO4KbVXAKLmjp3UVwQLX40BeTvVBtd4klw22jaWLQnLTxjAqlQ+MAXCLQVwnc8zjF9\n uuC8tUD/lLLgj15W+WjJvq9oAHQpZVE0u+/B3XS1vr4UvTaAMW8Aaw8QQHsSy1A+F5UP\n lMYg==",
        "X-Gm-Message-State": "AOAM530CycvhMet5dVOelAgv8Q17vMKrQ1sTgft715vlZoECOiWZ9YKA\n lIJMhSF/OT3NxOwARC137WqTW3C629YzIA==",
        "X-Google-Smtp-Source": "\n ABdhPJxa1bsexiUpNqWRRhAymow0QAg2iHdnWuL+vJGxc5YYsNJrK7hA52LHvb3lN7Tq6o+By+2xEg==",
        "X-Received": "by 2002:a17:90b:4018:: with SMTP id\n ie24mr1394427pjb.9.1599666801167;\n Wed, 09 Sep 2020 08:53:21 -0700 (PDT)",
        "From": "Lance Richardson <lance.richardson@broadcom.com>",
        "To": "Ajit Khaparde <ajit.khaparde@broadcom.com>,\n Somnath Kotur <somnath.kotur@broadcom.com>",
        "Cc": "dev@dpdk.org",
        "Date": "Wed,  9 Sep 2020 11:52:57 -0400",
        "Message-Id": "<20200909155302.28656-5-lance.richardson@broadcom.com>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20200909155302.28656-1-lance.richardson@broadcom.com>",
        "References": "<20200909155302.28656-1-lance.richardson@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 04/12] net/bnxt: require async cq for vector mode",
        "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": "Disable support for vector mode when async completions can be placed\nin a receive completion ring and change the default for all platforms\nto use a dedicated async completion ring.\n\nSimplify completion handling in vector mode receive paths now that\nit no longer needs to handle async completions.\n\nReviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>\nSigned-off-by: Lance Richardson <lance.richardson@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h               |  19 ++--\n drivers/net/bnxt/bnxt_ethdev.c        |   2 +-\n drivers/net/bnxt/bnxt_rxtx_vec_neon.c | 121 +++++++++++---------------\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c  | 116 +++++++++++-------------\n 4 files changed, 111 insertions(+), 147 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex a190d78bdd..ef5824cf9a 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -119,20 +119,19 @@\n \t(BNXT_CHIP_THOR(bp) ? TPA_MAX_SEGS_TH : \\\n \t\t\t      TPA_MAX_SEGS)\n \n-#ifdef RTE_ARCH_ARM64\n-#define BNXT_NUM_ASYNC_CPR(bp) (BNXT_STINGRAY(bp) ? 0 : 1)\n+/*\n+ * Define the number of async completion rings to be used. Set to zero for\n+ * configurations in which the maximum number of packet completion rings\n+ * for packet completions is desired or when async completion handling\n+ * cannot be interrupt-driven.\n+ */\n+#ifdef RTE_EXEC_ENV_FREEBSD\n+/* In FreeBSD OS, nic_uio driver does not support interrupts */\n+#define BNXT_NUM_ASYNC_CPR(bp) 0\n #else\n #define BNXT_NUM_ASYNC_CPR(bp) 1\n #endif\n \n-/* In FreeBSD OS, nic_uio driver does not support interrupts */\n-#ifdef RTE_EXEC_ENV_FREEBSD\n-#ifdef BNXT_NUM_ASYNC_CPR\n-#undef BNXT_NUM_ASYNC_CPR\n-#endif\n-#define BNXT_NUM_ASYNC_CPR(bp)\t0\n-#endif\n-\n #define BNXT_MISC_VEC_ID               RTE_INTR_VEC_ZERO_OFFSET\n #define BNXT_RX_VEC_START              RTE_INTR_VEC_RXTX_OFFSET\n \ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex c57c5cc2af..1ad9bfc0a6 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -1114,7 +1114,7 @@ bnxt_receive_function(struct rte_eth_dev *eth_dev)\n \t\tDEV_RX_OFFLOAD_OUTER_IPV4_CKSUM |\n \t\tDEV_RX_OFFLOAD_RSS_HASH |\n \t\tDEV_RX_OFFLOAD_VLAN_FILTER)) &&\n-\t    !BNXT_TRUFLOW_EN(bp)) {\n+\t    !BNXT_TRUFLOW_EN(bp) && BNXT_NUM_ASYNC_CPR(bp)) {\n \t\tPMD_DRV_LOG(INFO, \"Using vector mode receive for port %d\\n\",\n \t\t\t    eth_dev->data->port_id);\n \t\tbp->flags |= BNXT_FLAG_RX_VECTOR_PKT_MODE;\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\nindex eff196f3a0..a212d46cbe 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n@@ -206,7 +206,6 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tuint32_t cons;\n \tint nb_rx_pkts = 0;\n \tstruct rx_pkt_cmpl *rxcmp;\n-\tbool evt = false;\n \tconst uint64x2_t mbuf_init = {rxq->mbuf_initializer, 0};\n \tconst uint8x16_t shuf_msk = {\n \t\t0xFF, 0xFF, 0xFF, 0xFF,    /* pkt_type (zeroes) */\n@@ -215,6 +214,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\t0xFF, 0xFF,                /* vlan_tci (zeroes) */\n \t\t12, 13, 14, 15             /* rss hash */\n \t};\n+\tint i;\n \n \t/* If Rx Q was stopped return */\n \tif (unlikely(!rxq->rx_started))\n@@ -226,90 +226,73 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t/* Return no more than RTE_BNXT_MAX_RX_BURST per call. */\n \tnb_pkts = RTE_MIN(nb_pkts, RTE_BNXT_MAX_RX_BURST);\n \n-\t/* Make nb_pkts an integer multiple of RTE_BNXT_DESCS_PER_LOOP */\n+\t/* Make nb_pkts an integer multiple of RTE_BNXT_DESCS_PER_LOOP. */\n \tnb_pkts = RTE_ALIGN_FLOOR(nb_pkts, RTE_BNXT_DESCS_PER_LOOP);\n \tif (!nb_pkts)\n \t\treturn 0;\n \n \t/* Handle RX burst request */\n-\twhile (1) {\n+\tfor (i = 0; i < nb_pkts; i++) {\n+\t\tstruct rx_pkt_cmpl_hi *rxcmp1;\n+\t\tstruct rte_mbuf *mbuf;\n+\t\tuint64x2_t mm_rxcmp;\n+\t\tuint8x16_t pkt_mb;\n+\n \t\tcons = RING_CMP(cpr->cp_ring_struct, raw_cons);\n \n \t\trxcmp = (struct rx_pkt_cmpl *)&cpr->cp_desc_ring[cons];\n+\t\trxcmp1 = (struct rx_pkt_cmpl_hi *)&cpr->cp_desc_ring[cons + 1];\n \n-\t\tif (!CMP_VALID(rxcmp, raw_cons, cpr->cp_ring_struct))\n+\t\tif (!CMP_VALID(rxcmp1, raw_cons + 1, cpr->cp_ring_struct))\n \t\t\tbreak;\n \n-\t\tif (likely(CMP_TYPE(rxcmp) == RX_PKT_CMPL_TYPE_RX_L2)) {\n-\t\t\tstruct rx_pkt_cmpl_hi *rxcmp1;\n-\t\t\tuint32_t tmp_raw_cons;\n-\t\t\tuint16_t cp_cons;\n-\t\t\tstruct rte_mbuf *mbuf;\n-\t\t\tuint64x2_t mm_rxcmp;\n-\t\t\tuint8x16_t pkt_mb;\n-\n-\t\t\ttmp_raw_cons = NEXT_RAW_CMP(raw_cons);\n-\t\t\tcp_cons = RING_CMP(cpr->cp_ring_struct, tmp_raw_cons);\n-\t\t\trxcmp1 = (struct rx_pkt_cmpl_hi *)\n-\t\t\t\t\t\t&cpr->cp_desc_ring[cp_cons];\n-\n-\t\t\tif (!CMP_VALID(rxcmp1, tmp_raw_cons,\n-\t\t\t\t       cpr->cp_ring_struct))\n-\t\t\t\tbreak;\n-\n-\t\t\traw_cons = tmp_raw_cons;\n-\t\t\tcons = rxcmp->opaque;\n-\n-\t\t\tmbuf = rxr->rx_buf_ring[cons];\n-\t\t\trte_prefetch0(mbuf);\n-\t\t\trxr->rx_buf_ring[cons] = NULL;\n-\n-\t\t\t/* Set constant fields from mbuf initializer. */\n-\t\t\tvst1q_u64((uint64_t *)&mbuf->rearm_data, mbuf_init);\n-\n-\t\t\t/* Set mbuf pkt_len, data_len, and rss_hash fields. */\n-\t\t\tmm_rxcmp = vld1q_u64((uint64_t *)rxcmp);\n-\t\t\tpkt_mb = vqtbl1q_u8(vreinterpretq_u8_u64(mm_rxcmp),\n-\t\t\t\t\t    shuf_msk);\n-\t\t\tvst1q_u64((uint64_t *)&mbuf->rx_descriptor_fields1,\n-\t\t\t\t  vreinterpretq_u64_u8(pkt_mb));\n-\n-\t\t\trte_compiler_barrier();\n-\n-\t\t\tif (rxcmp->flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID)\n-\t\t\t\tmbuf->ol_flags |= PKT_RX_RSS_HASH;\n-\n-\t\t\tif (rxcmp1->flags2 &\n-\t\t\t    RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN) {\n-\t\t\t\tmbuf->vlan_tci = rxcmp1->metadata &\n-\t\t\t\t\t(RX_PKT_CMPL_METADATA_VID_MASK |\n-\t\t\t\t\tRX_PKT_CMPL_METADATA_DE |\n-\t\t\t\t\tRX_PKT_CMPL_METADATA_PRI_MASK);\n-\t\t\t\tmbuf->ol_flags |=\n-\t\t\t\t\tPKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n-\t\t\t}\n-\n-\t\t\tbnxt_parse_csum(mbuf, rxcmp1);\n-\t\t\tmbuf->packet_type = bnxt_parse_pkt_type(rxcmp, rxcmp1);\n-\n-\t\t\trx_pkts[nb_rx_pkts++] = mbuf;\n-\t\t} else if (!BNXT_NUM_ASYNC_CPR(rxq->bp)) {\n-\t\t\tevt =\n-\t\t\tbnxt_event_hwrm_resp_handler(rxq->bp,\n-\t\t\t\t\t\t     (struct cmpl_base *)rxcmp);\n+\t\traw_cons += 2;\n+\t\tcons = rxcmp->opaque;\n+\n+\t\tmbuf = rxr->rx_buf_ring[cons];\n+\t\trte_prefetch0(mbuf);\n+\t\trxr->rx_buf_ring[cons] = NULL;\n+\n+\t\t/* Set constant fields from mbuf initializer. */\n+\t\tvst1q_u64((uint64_t *)&mbuf->rearm_data, mbuf_init);\n+\n+\t\t/* Set mbuf pkt_len, data_len, and rss_hash fields. */\n+\t\tmm_rxcmp = vld1q_u64((uint64_t *)rxcmp);\n+\t\tpkt_mb = vqtbl1q_u8(vreinterpretq_u8_u64(mm_rxcmp), shuf_msk);\n+\t\tvst1q_u64((uint64_t *)&mbuf->rx_descriptor_fields1,\n+\t\t\t  vreinterpretq_u64_u8(pkt_mb));\n+\n+\t\trte_compiler_barrier();\n+\n+\t\tif (rxcmp->flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID)\n+\t\t\tmbuf->ol_flags |= PKT_RX_RSS_HASH;\n+\n+\t\tif (rxcmp1->flags2 &\n+\t\t    RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN) {\n+\t\t\tmbuf->vlan_tci = rxcmp1->metadata &\n+\t\t\t\t(RX_PKT_CMPL_METADATA_VID_MASK |\n+\t\t\t\tRX_PKT_CMPL_METADATA_DE |\n+\t\t\t\tRX_PKT_CMPL_METADATA_PRI_MASK);\n+\t\t\tmbuf->ol_flags |=\n+\t\t\t\tPKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n \t\t}\n \n-\t\traw_cons = NEXT_RAW_CMP(raw_cons);\n-\t\tif (nb_rx_pkts == nb_pkts || evt)\n-\t\t\tbreak;\n+\t\tbnxt_parse_csum(mbuf, rxcmp1);\n+\t\tmbuf->packet_type = bnxt_parse_pkt_type(rxcmp, rxcmp1);\n+\n+\t\trx_pkts[nb_rx_pkts++] = mbuf;\n \t}\n-\trxr->rx_prod = RING_ADV(rxr->rx_ring_struct, rxr->rx_prod, nb_rx_pkts);\n \n-\trxq->rxrearm_nb += nb_rx_pkts;\n-\tcpr->cp_raw_cons = raw_cons;\n-\tcpr->valid = !!(cpr->cp_raw_cons & cpr->cp_ring_struct->ring_size);\n-\tif (nb_rx_pkts || evt)\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+\n+\t\trxq->rxrearm_nb += nb_rx_pkts;\n+\t\tcpr->cp_raw_cons = raw_cons;\n+\t\tcpr->valid =\n+\t\t\t!!(cpr->cp_raw_cons & cpr->cp_ring_struct->ring_size);\n \t\tbnxt_db_cq(cpr);\n+\t}\n \n \treturn nb_rx_pkts;\n }\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex 822e43343f..c00d7f6807 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -210,7 +210,6 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tuint32_t cons;\n \tint nb_rx_pkts = 0;\n \tstruct rx_pkt_cmpl *rxcmp;\n-\tbool evt = false;\n \tconst __m128i mbuf_init = _mm_set_epi64x(0, rxq->mbuf_initializer);\n \tconst __m128i shuf_msk =\n \t\t_mm_set_epi8(15, 14, 13, 12,          /* rss */\n@@ -218,6 +217,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\t\t     3, 2,                    /* data_len */\n \t\t\t     0xFF, 0xFF, 3, 2,        /* pkt_len */\n \t\t\t     0xFF, 0xFF, 0xFF, 0xFF); /* pkt_type (zeroes) */\n+\tint i;\n \n \t/* If Rx Q was stopped return */\n \tif (unlikely(!rxq->rx_started))\n@@ -238,83 +238,65 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\treturn 0;\n \n \t/* Handle RX burst request */\n-\twhile (1) {\n+\tfor (i = 0; i < nb_pkts; i++) {\n+\t\tstruct rx_pkt_cmpl_hi *rxcmp1;\n+\t\tstruct rte_mbuf *mbuf;\n+\t\t__m128i mm_rxcmp, pkt_mb;\n+\n \t\tcons = RING_CMP(cpr->cp_ring_struct, raw_cons);\n \n \t\trxcmp = (struct rx_pkt_cmpl *)&cpr->cp_desc_ring[cons];\n+\t\trxcmp1 = (struct rx_pkt_cmpl_hi *)&cpr->cp_desc_ring[cons + 1];\n \n-\t\tif (!CMP_VALID(rxcmp, raw_cons, cpr->cp_ring_struct))\n+\t\tif (!CMP_VALID(rxcmp1, raw_cons + 1, cpr->cp_ring_struct))\n \t\t\tbreak;\n \n-\t\tif (likely(CMP_TYPE(rxcmp) == RX_PKT_CMPL_TYPE_RX_L2)) {\n-\t\t\tstruct rx_pkt_cmpl_hi *rxcmp1;\n-\t\t\tuint32_t tmp_raw_cons;\n-\t\t\tuint16_t cp_cons;\n-\t\t\tstruct rte_mbuf *mbuf;\n-\t\t\t__m128i mm_rxcmp, pkt_mb;\n-\n-\t\t\ttmp_raw_cons = NEXT_RAW_CMP(raw_cons);\n-\t\t\tcp_cons = RING_CMP(cpr->cp_ring_struct, tmp_raw_cons);\n-\t\t\trxcmp1 = (struct rx_pkt_cmpl_hi *)\n-\t\t\t\t\t\t&cpr->cp_desc_ring[cp_cons];\n-\n-\t\t\tif (!CMP_VALID(rxcmp1, tmp_raw_cons,\n-\t\t\t\t       cpr->cp_ring_struct))\n-\t\t\t\tbreak;\n-\n-\t\t\traw_cons = tmp_raw_cons;\n-\t\t\tcons = rxcmp->opaque;\n-\n-\t\t\tmbuf = rxr->rx_buf_ring[cons];\n-\t\t\trte_prefetch0(mbuf);\n-\t\t\trxr->rx_buf_ring[cons] = NULL;\n-\n-\t\t\t/* Set constant fields from mbuf initializer. */\n-\t\t\t_mm_store_si128((__m128i *)&mbuf->rearm_data,\n-\t\t\t\t\tmbuf_init);\n-\n-\t\t\t/* Set mbuf pkt_len, data_len, and rss_hash fields. */\n-\t\t\tmm_rxcmp = _mm_load_si128((__m128i *)rxcmp);\n-\t\t\tpkt_mb = _mm_shuffle_epi8(mm_rxcmp, shuf_msk);\n-\t\t\t_mm_storeu_si128((void *)&mbuf->rx_descriptor_fields1,\n-\t\t\t\t\t pkt_mb);\n-\n-\t\t\trte_compiler_barrier();\n-\n-\t\t\tif (rxcmp->flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID)\n-\t\t\t\tmbuf->ol_flags |= PKT_RX_RSS_HASH;\n-\n-\t\t\tif (rxcmp1->flags2 &\n-\t\t\t    RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN) {\n-\t\t\t\tmbuf->vlan_tci = rxcmp1->metadata &\n-\t\t\t\t\t(RX_PKT_CMPL_METADATA_VID_MASK |\n-\t\t\t\t\tRX_PKT_CMPL_METADATA_DE |\n-\t\t\t\t\tRX_PKT_CMPL_METADATA_PRI_MASK);\n-\t\t\t\tmbuf->ol_flags |=\n-\t\t\t\t\tPKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n-\t\t\t}\n-\n-\t\t\tbnxt_parse_csum(mbuf, rxcmp1);\n-\t\t\tmbuf->packet_type = bnxt_parse_pkt_type(rxcmp, rxcmp1);\n-\n-\t\t\trx_pkts[nb_rx_pkts++] = mbuf;\n-\t\t} else if (!BNXT_NUM_ASYNC_CPR(rxq->bp)) {\n-\t\t\tevt =\n-\t\t\tbnxt_event_hwrm_resp_handler(rxq->bp,\n-\t\t\t\t\t\t     (struct cmpl_base *)rxcmp);\n+\t\traw_cons += 2;\n+\t\tcons = rxcmp->opaque;\n+\n+\t\tmbuf = rxr->rx_buf_ring[cons];\n+\t\trte_prefetch0(mbuf);\n+\t\trxr->rx_buf_ring[cons] = NULL;\n+\n+\t\t/* Set constant fields from mbuf initializer. */\n+\t\t_mm_store_si128((__m128i *)&mbuf->rearm_data, mbuf_init);\n+\n+\t\t/* Set mbuf pkt_len, data_len, and rss_hash fields. */\n+\t\tmm_rxcmp = _mm_load_si128((__m128i *)rxcmp);\n+\t\tpkt_mb = _mm_shuffle_epi8(mm_rxcmp, shuf_msk);\n+\t\t_mm_storeu_si128((void *)&mbuf->rx_descriptor_fields1, pkt_mb);\n+\n+\t\trte_compiler_barrier();\n+\n+\t\tif (rxcmp->flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID)\n+\t\t\tmbuf->ol_flags |= PKT_RX_RSS_HASH;\n+\n+\t\tif (rxcmp1->flags2 &\n+\t\t    RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN) {\n+\t\t\tmbuf->vlan_tci = rxcmp1->metadata &\n+\t\t\t\t(RX_PKT_CMPL_METADATA_VID_MASK |\n+\t\t\t\tRX_PKT_CMPL_METADATA_DE |\n+\t\t\t\tRX_PKT_CMPL_METADATA_PRI_MASK);\n+\t\t\tmbuf->ol_flags |=\n+\t\t\t\tPKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n \t\t}\n \n-\t\traw_cons = NEXT_RAW_CMP(raw_cons);\n-\t\tif (nb_rx_pkts == nb_pkts || evt)\n-\t\t\tbreak;\n+\t\tbnxt_parse_csum(mbuf, rxcmp1);\n+\t\tmbuf->packet_type = bnxt_parse_pkt_type(rxcmp, rxcmp1);\n+\n+\t\trx_pkts[nb_rx_pkts++] = mbuf;\n \t}\n-\trxr->rx_prod = RING_ADV(rxr->rx_ring_struct, rxr->rx_prod, nb_rx_pkts);\n \n-\trxq->rxrearm_nb += nb_rx_pkts;\n-\tcpr->cp_raw_cons = raw_cons;\n-\tcpr->valid = !!(cpr->cp_raw_cons & cpr->cp_ring_struct->ring_size);\n-\tif (nb_rx_pkts || evt)\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+\n+\t\trxq->rxrearm_nb += nb_rx_pkts;\n+\t\tcpr->cp_raw_cons = raw_cons;\n+\t\tcpr->valid =\n+\t\t\t!!(cpr->cp_raw_cons & cpr->cp_ring_struct->ring_size);\n \t\tbnxt_db_cq(cpr);\n+\t}\n \n \treturn nb_rx_pkts;\n }\n",
    "prefixes": [
        "04/12"
    ]
}