get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77073,
    "url": "http://patches.dpdk.org/api/patches/77073/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200909155302.28656-10-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-10-lance.richardson@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200909155302.28656-10-lance.richardson@broadcom.com",
    "date": "2020-09-09T15:53:02",
    "name": "[09/12] net/bnxt: table-based handling for ol flags",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "2a34cd12318fc55dea8981e3a2059e0e751a6cf9",
    "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-10-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/77073/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77073/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 14B0CA04B5;\n\tWed,  9 Sep 2020 17:54:57 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 676471C197;\n\tWed,  9 Sep 2020 17:53:35 +0200 (CEST)",
            "from mail-pf1-f196.google.com (mail-pf1-f196.google.com\n [209.85.210.196]) by dpdk.org (Postfix) with ESMTP id 1E6831C194\n for <dev@dpdk.org>; Wed,  9 Sep 2020 17:53:34 +0200 (CEST)",
            "by mail-pf1-f196.google.com with SMTP id k15so2502560pfc.12\n for <dev@dpdk.org>; Wed, 09 Sep 2020 08:53:34 -0700 (PDT)",
            "from localhost.localdomain ([192.19.231.250])\n by smtp.gmail.com with ESMTPSA id h15sm3188427pfo.23.2020.09.09.08.53.32\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 09 Sep 2020 08:53:32 -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=YQOZAO7EprWQq5D6jLRqslJ+oGqALExFy9CdnocF15U=;\n b=Dx65reN5LbcZL8Ki+nmxA+PX9s6ofoPSn9g1TyWgh+8NkbpfgMW1tdjMKQghPovxHQ\n A30u5PmeZAI44eyVj9Yh4oW3COkmWXSiWrySxlER65oeukClIpKlaVxoyEHfKdUL/a8q\n 52w8+hzKCpFlO+E8NS0cY8/QkGUb77KLvqq0o=",
        "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=YQOZAO7EprWQq5D6jLRqslJ+oGqALExFy9CdnocF15U=;\n b=edlDnfiS1B1J9ZlWf0wFlhxMMqpZB76oe8qfWkDWWs5xqfHzxqHRzmD4VjDNOVTXcy\n Pi57zDWXYvj6K0Ap0mZ6ILeRwZSgPVi+fM+QMQE8Lw8/usKimDCGfG0dnP6WKz6t/ghV\n QFJm695wUcZGX8+9+vWh21DYz5+wpRwn93m1VJtyRn2aQx5igXCIMT2x9oBPuMwBoT/L\n eFvla50qs0NELqphyBOWYSACzw29u21Tsn7gY43qMK/vnbNRTQXymA1PsTfKSxfMfOhS\n Ja01Bpq7LDRmpWK3ukITek52nzoB0QCmXHZpcBuoI228tRsG4Wfop3I0APZxCzvmT0L9\n qS1w==",
        "X-Gm-Message-State": "AOAM532+TEYMex+bPk6k9wsCeAG2Ro4w0cbgWSPFtPSLEPUqbIUhM7yW\n 7a16JFzDuEZHkesMOSarl2FzirlAsNRsZA==",
        "X-Google-Smtp-Source": "\n ABdhPJxfovbsx/EVikafobqkoBMbSTp4kHFYx1WxUs8b9iJx491WXjFTvxwpW6ieZbwYiK2u+hPhxg==",
        "X-Received": "by 2002:a62:5bc2:0:b029:13e:d13d:a090 with SMTP id\n p185-20020a625bc20000b029013ed13da090mr1383187pfb.39.1599666813152;\n Wed, 09 Sep 2020 08:53:33 -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:53:02 -0400",
        "Message-Id": "<20200909155302.28656-10-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 09/12] net/bnxt: table-based handling for ol flags",
        "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": "Use table to translate receive descriptor status flags to\nrte_mbuf ol_flags values.\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_rxr.c           | 166 ++++++++++++++++----------\n drivers/net/bnxt/bnxt_rxr.h           |   6 +\n drivers/net/bnxt/bnxt_rxtx_vec_neon.c |  99 ++++++---------\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c  |  96 ++++++---------\n 4 files changed, 181 insertions(+), 186 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex a882dd20be..33bd006530 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -406,6 +406,95 @@ bnxt_parse_pkt_type(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1)\n \treturn bnxt_ptype_table[index];\n }\n \n+uint32_t\n+bnxt_ol_flags_table[BNXT_OL_FLAGS_TBL_DIM] __rte_cache_aligned;\n+\n+uint32_t\n+bnxt_ol_flags_err_table[BNXT_OL_FLAGS_ERR_TBL_DIM] __rte_cache_aligned;\n+\n+static void __rte_cold\n+bnxt_init_ol_flags_tables(void)\n+{\n+\tstatic bool initialized;\n+\tuint32_t *pt;\n+\tint i;\n+\n+\tif (initialized)\n+\t\treturn;\n+\n+\t/* Initialize ol_flags table. */\n+\tpt = bnxt_ol_flags_table;\n+\tfor (i = 0; i < BNXT_OL_FLAGS_TBL_DIM; i++) {\n+\t\tpt[i] = 0;\n+\t\tif (i & RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN)\n+\t\t\tpt[i] |= PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n+\n+\t\tif (i & RX_PKT_CMPL_FLAGS2_IP_CS_CALC)\n+\t\t\tpt[i] |= PKT_RX_IP_CKSUM_GOOD;\n+\n+\t\tif (i & RX_PKT_CMPL_FLAGS2_L4_CS_CALC)\n+\t\t\tpt[i] |= PKT_RX_L4_CKSUM_GOOD;\n+\n+\t\tif (i & RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC)\n+\t\t\tpt[i] |= PKT_RX_OUTER_L4_CKSUM_GOOD;\n+\t}\n+\n+\t/* Initialize checksum error table. */\n+\tpt = bnxt_ol_flags_err_table;\n+\tfor (i = 0; i < BNXT_OL_FLAGS_ERR_TBL_DIM; i++) {\n+\t\tpt[i] = 0;\n+\t\tif (i & (RX_PKT_CMPL_ERRORS_IP_CS_ERROR >> 4))\n+\t\t\tpt[i] |= PKT_RX_IP_CKSUM_BAD;\n+\n+\t\tif (i & (RX_PKT_CMPL_ERRORS_L4_CS_ERROR >> 4))\n+\t\t\tpt[i] |= PKT_RX_L4_CKSUM_BAD;\n+\n+\t\tif (i & (RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR >> 4))\n+\t\t\tpt[i] |= PKT_RX_EIP_CKSUM_BAD;\n+\n+\t\tif (i & (RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR >> 4))\n+\t\t\tpt[i] |= PKT_RX_OUTER_L4_CKSUM_BAD;\n+\t}\n+\n+\tinitialized = true;\n+}\n+\n+static void\n+bnxt_set_ol_flags(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1,\n+\t\t  struct rte_mbuf *mbuf)\n+{\n+\tuint16_t flags_type, errors, flags;\n+\tuint64_t ol_flags;\n+\n+\tflags_type = rte_le_to_cpu_16(rxcmp->flags_type);\n+\n+\tflags = rte_le_to_cpu_32(rxcmp1->flags2) &\n+\t\t\t\t(RX_PKT_CMPL_FLAGS2_IP_CS_CALC |\n+\t\t\t\t RX_PKT_CMPL_FLAGS2_L4_CS_CALC |\n+\t\t\t\t RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC |\n+\t\t\t\t RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC |\n+\t\t\t\t RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN);\n+\n+\terrors = rte_le_to_cpu_16(rxcmp1->errors_v2) &\n+\t\t\t\t(RX_PKT_CMPL_ERRORS_IP_CS_ERROR |\n+\t\t\t\t RX_PKT_CMPL_ERRORS_L4_CS_ERROR |\n+\t\t\t\t RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR |\n+\t\t\t\t RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR);\n+\terrors = (errors >> 4) & flags;\n+\n+\tol_flags = bnxt_ol_flags_table[flags & ~errors];\n+\n+\tif (errors)\n+\t\tol_flags |= bnxt_ol_flags_err_table[errors];\n+\n+\tif (flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID) {\n+\t\tmbuf->hash.rss = rte_le_to_cpu_32(rxcmp->rss_hash);\n+\t\tol_flags |= PKT_RX_RSS_HASH;\n+\t}\n+\n+\tmbuf->ol_flags = ol_flags;\n+}\n+\n #ifdef RTE_LIBRTE_IEEE1588\n static void\n bnxt_get_rx_ts_thor(struct bnxt *bp, uint32_t rx_ts_cmpl)\n@@ -583,8 +672,7 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \tint rc = 0;\n \tuint8_t agg_buf = 0;\n \tuint16_t cmp_type;\n-\tuint32_t flags2_f = 0, vfr_flag = 0, mark_id = 0;\n-\tuint16_t flags_type;\n+\tuint32_t vfr_flag = 0, mark_id = 0;\n \tstruct bnxt *bp = rxq->bp;\n \n \trxcmp = (struct rx_pkt_cmpl *)\n@@ -653,13 +741,17 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \tmbuf->pkt_len = rxcmp->len;\n \tmbuf->data_len = mbuf->pkt_len;\n \tmbuf->port = rxq->port_id;\n-\tmbuf->ol_flags = 0;\n \n-\tflags_type = rte_le_to_cpu_16(rxcmp->flags_type);\n-\tif (flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID) {\n-\t\tmbuf->hash.rss = rxcmp->rss_hash;\n-\t\tmbuf->ol_flags |= PKT_RX_RSS_HASH;\n+\tbnxt_set_ol_flags(rxcmp, rxcmp1, mbuf);\n+\n+#ifdef RTE_LIBRTE_IEEE1588\n+\tif (unlikely((rte_le_to_cpu_16(rxcmp->flags_type) &\n+\t\t      RX_PKT_CMPL_FLAGS_MASK) ==\n+\t\t      RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP)) {\n+\t\tmbuf->ol_flags |= PKT_RX_IEEE1588_PTP | PKT_RX_IEEE1588_TMST;\n+\t\tbnxt_get_rx_ts_thor(rxq->bp, rxcmp1->reorder);\n \t}\n+#endif\n \n \tif (BNXT_TRUFLOW_EN(bp))\n \t\tmark_id = bnxt_ulp_set_mark_in_mbuf(rxq->bp, rxcmp1, mbuf,\n@@ -667,66 +759,9 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \telse\n \t\tbnxt_set_mark_in_mbuf(rxq->bp, rxcmp1, mbuf);\n \n-#ifdef RTE_LIBRTE_IEEE1588\n-\tif (unlikely((flags_type & RX_PKT_CMPL_FLAGS_MASK) ==\n-\t\t     RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP)) {\n-\t\tmbuf->ol_flags |= PKT_RX_IEEE1588_PTP | PKT_RX_IEEE1588_TMST;\n-\t\tbnxt_get_rx_ts_thor(rxq->bp, rxcmp1->reorder);\n-\t}\n-#endif\n \tif (agg_buf)\n \t\tbnxt_rx_pages(rxq, mbuf, &tmp_raw_cons, agg_buf, NULL);\n \n-\tif (rxcmp1->flags2 & RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN) {\n-\t\tmbuf->vlan_tci = rxcmp1->metadata &\n-\t\t\t(RX_PKT_CMPL_METADATA_VID_MASK |\n-\t\t\tRX_PKT_CMPL_METADATA_DE |\n-\t\t\tRX_PKT_CMPL_METADATA_PRI_MASK);\n-\t\tmbuf->ol_flags |= PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n-\t}\n-\n-\tflags2_f = flags2_0xf(rxcmp1);\n-\t/* IP Checksum */\n-\tif (likely(IS_IP_NONTUNNEL_PKT(flags2_f))) {\n-\t\tif (unlikely(RX_CMP_IP_CS_ERROR(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n-\t\telse if (unlikely(RX_CMP_IP_CS_UNKNOWN(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_UNKNOWN;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\t} else if (IS_IP_TUNNEL_PKT(flags2_f)) {\n-\t\tif (unlikely(RX_CMP_IP_OUTER_CS_ERROR(rxcmp1) ||\n-\t\t\t     RX_CMP_IP_CS_ERROR(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n-\t\telse if (unlikely(RX_CMP_IP_CS_UNKNOWN(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_UNKNOWN;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\t}\n-\n-\t/* L4 Checksum */\n-\tif (likely(IS_L4_NONTUNNEL_PKT(flags2_f))) {\n-\t\tif (unlikely(RX_CMP_L4_INNER_CS_ERR2(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\t} else if (IS_L4_TUNNEL_PKT(flags2_f)) {\n-\t\tif (unlikely(RX_CMP_L4_INNER_CS_ERR2(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\t\tif (unlikely(RX_CMP_L4_OUTER_CS_ERR2(rxcmp1))) {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_BAD;\n-\t\t} else if (unlikely(IS_L4_TUNNEL_PKT_ONLY_INNER_L4_CS\n-\t\t\t\t    (flags2_f))) {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_UNKNOWN;\n-\t\t} else {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_GOOD;\n-\t\t}\n-\t} else if (unlikely(RX_CMP_L4_CS_UNKNOWN(rxcmp1))) {\n-\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_UNKNOWN;\n-\t}\n-\n \tmbuf->packet_type = bnxt_parse_pkt_type(rxcmp, rxcmp1);\n \n #ifdef BNXT_DEBUG\n@@ -1075,6 +1110,9 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)\n \t/* Initialize packet type table. */\n \tbnxt_init_ptype_table();\n \n+\t/* Initialize offload flags parsing table. */\n+\tbnxt_init_ol_flags_tables();\n+\n \tsize = rte_pktmbuf_data_room_size(rxq->mb_pool) - RTE_PKTMBUF_HEADROOM;\n \tsize = RTE_MIN(BNXT_MAX_PKT_LEN, size);\n \ndiff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h\nindex 0e21c8f900..4f5e23b855 100644\n--- a/drivers/net/bnxt/bnxt_rxr.h\n+++ b/drivers/net/bnxt/bnxt_rxr.h\n@@ -240,4 +240,10 @@ void bnxt_set_mark_in_mbuf(struct bnxt *bp,\n \n #define BNXT_PTYPE_TBL_DIM\t128\n extern uint32_t bnxt_ptype_table[BNXT_PTYPE_TBL_DIM];\n+\n+#define BNXT_OL_FLAGS_TBL_DIM\t32\n+extern uint32_t bnxt_ol_flags_table[BNXT_OL_FLAGS_TBL_DIM];\n+\n+#define BNXT_OL_FLAGS_ERR_TBL_DIM 16\n+extern uint32_t bnxt_ol_flags_err_table[BNXT_OL_FLAGS_ERR_TBL_DIM];\n #endif\ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\nindex fade67ec8e..37b8c83656 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n@@ -116,50 +116,28 @@ bnxt_parse_pkt_type(uint32x4_t mm_rxcmp, uint32x4_t mm_rxcmp1)\n \treturn bnxt_ptype_table[index];\n }\n \n-static void\n-bnxt_parse_csum(struct rte_mbuf *mbuf, struct rx_pkt_cmpl_hi *rxcmp1)\n+static uint32_t\n+bnxt_set_ol_flags(uint32x4_t mm_rxcmp, uint32x4_t mm_rxcmp1)\n {\n-\tuint32_t flags;\n+\tuint16_t flags_type, errors, flags;\n+\tuint32_t ol_flags;\n \n-\tflags = flags2_0xf(rxcmp1);\n-\t/* IP Checksum */\n-\tif (likely(IS_IP_NONTUNNEL_PKT(flags))) {\n-\t\tif (unlikely(RX_CMP_IP_CS_ERROR(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\t} else if (IS_IP_TUNNEL_PKT(flags)) {\n-\t\tif (unlikely(RX_CMP_IP_OUTER_CS_ERROR(rxcmp1) ||\n-\t\t\t     RX_CMP_IP_CS_ERROR(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\t} else if (unlikely(RX_CMP_IP_CS_UNKNOWN(rxcmp1))) {\n-\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_UNKNOWN;\n-\t}\n+\t/* Extract rxcmp1->flags2. */\n+\tflags = vgetq_lane_u32(mm_rxcmp1, 0) & 0x1F;\n+\t/* Extract rxcmp->flags_type. */\n+\tflags_type = vgetq_lane_u32(mm_rxcmp, 0);\n+\t/* Extract rxcmp1->errors_v2. */\n+\terrors = (vgetq_lane_u32(mm_rxcmp1, 2) >> 4) & flags & 0xF;\n \n-\t/* L4 Checksum */\n-\tif (likely(IS_L4_NONTUNNEL_PKT(flags))) {\n-\t\tif (unlikely(RX_CMP_L4_INNER_CS_ERR2(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\t} else if (IS_L4_TUNNEL_PKT(flags)) {\n-\t\tif (unlikely(RX_CMP_L4_INNER_CS_ERR2(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\t\tif (unlikely(RX_CMP_L4_OUTER_CS_ERR2(rxcmp1))) {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_BAD;\n-\t\t} else if (unlikely(IS_L4_TUNNEL_PKT_ONLY_INNER_L4_CS\n-\t\t\t\t    (flags))) {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_UNKNOWN;\n-\t\t} else {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_GOOD;\n-\t\t}\n-\t} else if (unlikely(RX_CMP_L4_CS_UNKNOWN(rxcmp1))) {\n-\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_UNKNOWN;\n-\t}\n+\tol_flags = bnxt_ol_flags_table[flags & ~errors];\n+\n+\tif (flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID)\n+\t\tol_flags |= PKT_RX_RSS_HASH;\n+\n+\tif (errors)\n+\t\tol_flags |= bnxt_ol_flags_err_table[errors];\n+\n+\treturn ol_flags;\n }\n \n uint16_t\n@@ -202,10 +180,12 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \tfor (i = 0; i < nb_pkts; i++) {\n \t\tuint32x4_t mm_rxcmp, mm_rxcmp1;\n \t\tstruct rx_pkt_cmpl_hi *rxcmp1;\n+\t\tuint32x4_t pkt_mb, rearm;\n+\t\tuint32_t ptype, ol_flags;\n \t\tstruct rte_mbuf *mbuf;\n-\t\tuint32x4_t pkt_mb;\n+\t\tuint16_t vlan_tci;\n+\t\tuint16x8_t tmp16;\n \t\tuint8x16_t tmp;\n-\t\tuint32_t ptype;\n \n \t\tcons = RING_CMP(cpr->cp_ring_struct, raw_cons);\n \n@@ -224,33 +204,30 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\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+\t\t/* Set fields from mbuf initializer and ol_flags. */\n+\t\tol_flags = bnxt_set_ol_flags(mm_rxcmp, mm_rxcmp1);\n+\t\trearm = vsetq_lane_u32(ol_flags,\n+\t\t\t\t       vreinterpretq_u32_u64(mbuf_init), 2);\n+\t\tvst1q_u32((uint32_t *)&mbuf->rearm_data, rearm);\n \n \t\t/* Set mbuf pkt_len, data_len, and rss_hash fields. */\n \t\ttmp = vqtbl1q_u8(vreinterpretq_u8_u32(mm_rxcmp), shuf_msk);\n \t\tpkt_mb = vreinterpretq_u32_u8(tmp);\n+\n+\t\t/* Set packet type. */\n \t\tptype = bnxt_parse_pkt_type(mm_rxcmp, mm_rxcmp1);\n \t\tpkt_mb = vsetq_lane_u32(ptype, pkt_mb, 0);\n \n-\t\tvst1q_u32((uint32_t *)&mbuf->rx_descriptor_fields1, pkt_mb);\n+\t\t/* Set vlan_tci. */\n+\t\tvlan_tci = vgetq_lane_u32(mm_rxcmp1, 1);\n+\t\ttmp16 = vsetq_lane_u16(vlan_tci,\n+\t\t\t\t       vreinterpretq_u16_u32(pkt_mb),\n+\t\t\t\t       5);\n+\t\tpkt_mb = vreinterpretq_u32_u16(tmp16);\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+\t\t/* Store descriptor fields. */\n+\t\tvst1q_u32((uint32_t *)&mbuf->rx_descriptor_fields1, pkt_mb);\n \n-\t\tbnxt_parse_csum(mbuf, rxcmp1);\n \t\trx_pkts[nb_rx_pkts++] = mbuf;\n \t}\n \ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex 69ffbe4cc9..761d835963 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -120,50 +120,28 @@ bnxt_parse_pkt_type(__m128i mm_rxcmp, __m128i mm_rxcmp1)\n \treturn _mm_set_epi32(0, 0, 0, bnxt_ptype_table[index]);\n }\n \n-static void\n-bnxt_parse_csum(struct rte_mbuf *mbuf, struct rx_pkt_cmpl_hi *rxcmp1)\n+static __m128i\n+bnxt_set_ol_flags(__m128i mm_rxcmp, __m128i mm_rxcmp1)\n {\n-\tuint32_t flags;\n+\tuint16_t flags_type, errors, flags;\n+\tuint32_t ol_flags;\n \n-\tflags = flags2_0xf(rxcmp1);\n-\t/* IP Checksum */\n-\tif (likely(IS_IP_NONTUNNEL_PKT(flags))) {\n-\t\tif (unlikely(RX_CMP_IP_CS_ERROR(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\t} else if (IS_IP_TUNNEL_PKT(flags)) {\n-\t\tif (unlikely(RX_CMP_IP_OUTER_CS_ERROR(rxcmp1) ||\n-\t\t\t     RX_CMP_IP_CS_ERROR(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\t} else if (unlikely(RX_CMP_IP_CS_UNKNOWN(rxcmp1))) {\n-\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_UNKNOWN;\n-\t}\n+\t/* Extract rxcmp1->flags2. */\n+\tflags = _mm_extract_epi32(mm_rxcmp1, 0) & 0x1F;\n+\t/* Extract rxcmp->flags_type. */\n+\tflags_type = _mm_extract_epi16(mm_rxcmp, 0);\n+\t/* Extract rxcmp1->errors_v2. */\n+\terrors = (_mm_extract_epi16(mm_rxcmp1, 4) >> 4) & flags & 0xF;\n \n-\t/* L4 Checksum */\n-\tif (likely(IS_L4_NONTUNNEL_PKT(flags))) {\n-\t\tif (unlikely(RX_CMP_L4_INNER_CS_ERR2(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\t} else if (IS_L4_TUNNEL_PKT(flags)) {\n-\t\tif (unlikely(RX_CMP_L4_INNER_CS_ERR2(rxcmp1)))\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n-\t\telse\n-\t\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\t\tif (unlikely(RX_CMP_L4_OUTER_CS_ERR2(rxcmp1))) {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_BAD;\n-\t\t} else if (unlikely(IS_L4_TUNNEL_PKT_ONLY_INNER_L4_CS\n-\t\t\t\t    (flags))) {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_UNKNOWN;\n-\t\t} else {\n-\t\t\tmbuf->ol_flags |= PKT_RX_OUTER_L4_CKSUM_GOOD;\n-\t\t}\n-\t} else if (unlikely(RX_CMP_L4_CS_UNKNOWN(rxcmp1))) {\n-\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_UNKNOWN;\n-\t}\n+\tol_flags = bnxt_ol_flags_table[flags & ~errors];\n+\n+\tif (flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID)\n+\t\tol_flags |= PKT_RX_RSS_HASH;\n+\n+\tif (errors)\n+\t\tol_flags |= bnxt_ol_flags_err_table[errors];\n+\n+\treturn _mm_set_epi64x(ol_flags, 0);\n }\n \n uint16_t\n@@ -208,7 +186,7 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\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, mm_rxcmp1, pkt_mb, ptype;\n+\t\t__m128i mm_rxcmp, mm_rxcmp1, pkt_mb, ptype, rearm;\n \n \t\tcons = RING_CMP(cpr->cp_ring_struct, raw_cons);\n \n@@ -225,35 +203,31 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\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+\t\t/* Set fields from mbuf initializer and ol_flags. */\n+\t\trearm = _mm_or_si128(mbuf_init,\n+\t\t\t\t     bnxt_set_ol_flags(mm_rxcmp, mm_rxcmp1));\n+\t\t_mm_store_si128((__m128i *)&mbuf->rearm_data, rearm);\n \n \t\t/* Set mbuf pkt_len, data_len, and rss_hash fields. */\n \t\tpkt_mb = _mm_shuffle_epi8(mm_rxcmp, shuf_msk);\n+\n+\t\t/* Set packet type. */\n \t\tptype = bnxt_parse_pkt_type(mm_rxcmp, mm_rxcmp1);\n \t\tpkt_mb = _mm_blend_epi16(pkt_mb, ptype, 0x3);\n \n-\t\t_mm_storeu_si128((void *)&mbuf->rx_descriptor_fields1, pkt_mb);\n+\t\t/*\n+\t\t * Shift vlan_tci from completion metadata field left six\n+\t\t * bytes and blend into mbuf->rx_descriptor_fields1 to set\n+\t\t * mbuf->vlan_tci.\n+\t\t */\n+\t\tpkt_mb = _mm_blend_epi16(pkt_mb,\n+\t\t\t\t\t _mm_slli_si128(mm_rxcmp1, 6), 0x20);\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+\t\t/* Store descriptor fields. */\n+\t\t_mm_storeu_si128((void *)&mbuf->rx_descriptor_fields1, pkt_mb);\n \n-\t\tbnxt_parse_csum(mbuf, rxcmp1);\n \t\trx_pkts[nb_rx_pkts++] = mbuf;\n \t}\n \n",
    "prefixes": [
        "09/12"
    ]
}