get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 77072,
    "url": "http://patches.dpdk.org/api/patches/77072/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200909155302.28656-9-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-9-lance.richardson@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200909155302.28656-9-lance.richardson@broadcom.com",
    "date": "2020-09-09T15:53:01",
    "name": "[08/12] net/bnxt: use table-based packet type translation",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "399c639f89aaa0239439266d6c0ecf67d8420c49",
    "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-9-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/77072/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/77072/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 6DF82A04B5;\n\tWed,  9 Sep 2020 17:54:43 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id CD87E1C138;\n\tWed,  9 Sep 2020 17:53:32 +0200 (CEST)",
            "from mail-pf1-f170.google.com (mail-pf1-f170.google.com\n [209.85.210.170]) by dpdk.org (Postfix) with ESMTP id CD0121C135\n for <dev@dpdk.org>; Wed,  9 Sep 2020 17:53:31 +0200 (CEST)",
            "by mail-pf1-f170.google.com with SMTP id k15so2502466pfc.12\n for <dev@dpdk.org>; Wed, 09 Sep 2020 08:53:31 -0700 (PDT)",
            "from localhost.localdomain ([192.19.231.250])\n by smtp.gmail.com with ESMTPSA id h15sm3188427pfo.23.2020.09.09.08.53.29\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Wed, 09 Sep 2020 08:53:30 -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=ifK5iZWa5OkCGGSVj77jmZUF5GvsafP/WFUinoqv1rw=;\n b=YIv2icgxAeK0tDWda3JtN1NYqRF9+lcg+pDUXbueM7XR6pIg977fJm+s3ClMyhnsbP\n kH6PftKUUzITwZTVHE0lcxrq9tlSt9GvLqM7md/cw58JI/9DttdOL496Sne/HPhMzeUD\n /jT5TqhQSwhP7C8ar6l8GfBU6ot6XIpdXOnhc=",
        "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=ifK5iZWa5OkCGGSVj77jmZUF5GvsafP/WFUinoqv1rw=;\n b=ly7VIfxvgt4l6urSQBD1BCkOu+4eim6KPVzMSEyT+Jikml1GyWjPYIY/dZ2vbu1IT+\n Kl+L1TL69WFhyvBDyiskJb9EjXOJDmQ50U/tyPDvBaApP4GieGsVSMxhOmdgq5mTwA2C\n XjFHwyc8Z1cqOO9EXc7wbNN4b6Nbl6EDb+3WDVeK29zQZRxrwptKsxefL5D8YjP6M/UN\n JFqVWfdN7H4F6LXmZ+EG6lr8WjroUnqJ7GDjYymLeo6wK46vr+VR9aBu349gpFVpTPRi\n ElHjk4MOdUv/oajPg/e77+YGgthDWD3r63mr/sHB/npAz/smHq3w36UTTcjE+BOB0nTX\n pBtQ==",
        "X-Gm-Message-State": "AOAM530u8E/0Atkfw8PNNtCoZK8Hc2fwsJakgO8u/xWw/+jVBiG6J1hG\n zh8dKqDnPg7AWYOquy3K20iN3g==",
        "X-Google-Smtp-Source": "\n ABdhPJyFFSKTQCq7lVQX4EureDvto58J3KPBoEcp9TbbQQ0c2A9E9nXg2eCzGf2XolyvGCvuydZbCw==",
        "X-Received": "by 2002:a63:242:: with SMTP id 63mr1070579pgc.182.1599666810821;\n Wed, 09 Sep 2020 08:53:30 -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:01 -0400",
        "Message-Id": "<20200909155302.28656-9-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 08/12] net/bnxt: use table-based packet type\n\ttranslation",
        "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-based method for translating receive packet descriptor\nflags into rte_mbuf packet type 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           | 127 ++++++++++++++++----------\n drivers/net/bnxt/bnxt_rxr.h           |   2 +\n drivers/net/bnxt/bnxt_rxtx_vec_neon.c |  88 ++++++------------\n drivers/net/bnxt/bnxt_rxtx_vec_sse.c  |  81 +++++-----------\n 4 files changed, 134 insertions(+), 164 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex 5673e2b50f..a882dd20be 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -322,62 +322,88 @@ static inline struct rte_mbuf *bnxt_tpa_end(\n \treturn mbuf;\n }\n \n-static uint32_t\n-bnxt_parse_pkt_type(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1)\n+uint32_t bnxt_ptype_table[BNXT_PTYPE_TBL_DIM] __rte_cache_aligned;\n+\n+static void __rte_cold\n+bnxt_init_ptype_table(void)\n {\n-\tuint32_t l3, pkt_type = 0;\n-\tuint32_t t_ipcs = 0, ip6 = 0, vlan = 0;\n-\tuint32_t flags_type;\n-\n-\tvlan = !!(rxcmp1->flags2 &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN));\n-\tpkt_type |= vlan ? RTE_PTYPE_L2_ETHER_VLAN : RTE_PTYPE_L2_ETHER;\n-\n-\tt_ipcs = !!(rxcmp1->flags2 &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC));\n-\tip6 = !!(rxcmp1->flags2 &\n-\t\t rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_TYPE));\n-\n-\tflags_type = rxcmp->flags_type &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS_ITYPE_MASK);\n-\n-\tif (!t_ipcs && !ip6)\n-\t\tl3 = RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;\n-\telse if (!t_ipcs && ip6)\n-\t\tl3 = RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;\n-\telse if (t_ipcs && !ip6)\n-\t\tl3 = RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;\n-\telse\n-\t\tl3 = RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;\n+\tuint32_t *pt = bnxt_ptype_table;\n+\tstatic bool initialized;\n+\tint ip6, tun, type;\n+\tuint32_t l3;\n+\tint i;\n \n-\tswitch (flags_type) {\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_ICMP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_ICMP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_ICMP;\n-\t\tbreak;\n+\tif (initialized)\n+\t\treturn;\n \n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_TCP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_TCP;\n+\tfor (i = 0; i < BNXT_PTYPE_TBL_DIM; i++) {\n+\t\tif (i & (RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN >> 2))\n+\t\t\tpt[i] = RTE_PTYPE_L2_ETHER_VLAN;\n \t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_TCP;\n-\t\tbreak;\n-\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_UDP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_UDP;\n+\t\t\tpt[i] = RTE_PTYPE_L2_ETHER;\n+\n+\t\tip6 = i & (RX_PKT_CMPL_FLAGS2_IP_TYPE >> 7);\n+\t\ttun = i & (RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC >> 2);\n+\t\ttype = (i & 0x38) << 9;\n+\n+\t\tif (!tun && !ip6)\n+\t\t\tl3 = RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;\n+\t\telse if (!tun && ip6)\n+\t\t\tl3 = RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;\n+\t\telse if (tun && !ip6)\n+\t\t\tl3 = RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;\n \t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_UDP;\n-\t\tbreak;\n-\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_IP):\n-\t\tpkt_type |= l3;\n-\t\tbreak;\n+\t\t\tl3 = RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;\n+\n+\t\tswitch (type) {\n+\t\tcase RX_PKT_CMPL_FLAGS_ITYPE_ICMP:\n+\t\t\tif (tun)\n+\t\t\t\tpt[i] |= l3 | RTE_PTYPE_INNER_L4_ICMP;\n+\t\t\telse\n+\t\t\t\tpt[i] |= l3 | RTE_PTYPE_L4_ICMP;\n+\t\t\tbreak;\n+\t\tcase RX_PKT_CMPL_FLAGS_ITYPE_TCP:\n+\t\t\tif (tun)\n+\t\t\t\tpt[i] |= l3 | RTE_PTYPE_INNER_L4_TCP;\n+\t\t\telse\n+\t\t\t\tpt[i] |= l3 | RTE_PTYPE_L4_TCP;\n+\t\t\tbreak;\n+\t\tcase RX_PKT_CMPL_FLAGS_ITYPE_UDP:\n+\t\t\tif (tun)\n+\t\t\t\tpt[i] |= l3 | RTE_PTYPE_INNER_L4_UDP;\n+\t\t\telse\n+\t\t\t\tpt[i] |= l3 | RTE_PTYPE_L4_UDP;\n+\t\t\tbreak;\n+\t\tcase RX_PKT_CMPL_FLAGS_ITYPE_IP:\n+\t\t\tpt[i] |= l3;\n+\t\t\tbreak;\n+\t\t}\n \t}\n+\tinitialized = true;\n+}\n+\n+static uint32_t\n+bnxt_parse_pkt_type(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1)\n+{\n+\tuint32_t flags_type, flags2;\n+\tuint8_t index;\n \n-\treturn pkt_type;\n+\tflags_type = rte_le_to_cpu_16(rxcmp->flags_type);\n+\tflags2 = rte_le_to_cpu_32(rxcmp1->flags2);\n+\n+\t/*\n+\t * Index format:\n+\t *     bit 0: RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC\n+\t *     bit 1: RX_CMPL_FLAGS2_IP_TYPE\n+\t *     bit 2: RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN\n+\t *     bits 3-6: RX_PKT_CMPL_FLAGS_ITYPE\n+\t */\n+\tindex = ((flags_type & RX_PKT_CMPL_FLAGS_ITYPE_MASK) >> 9) |\n+\t\t((flags2 & (RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN |\n+\t\t\t   RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC)) >> 2) |\n+\t\t((flags2 & RX_PKT_CMPL_FLAGS2_IP_TYPE) >> 7);\n+\n+\treturn bnxt_ptype_table[index];\n }\n \n #ifdef RTE_LIBRTE_IEEE1588\n@@ -1046,6 +1072,9 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)\n \tunsigned int i;\n \tuint16_t size;\n \n+\t/* Initialize packet type table. */\n+\tbnxt_init_ptype_table();\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 5b9b5f3108..0e21c8f900 100644\n--- a/drivers/net/bnxt/bnxt_rxr.h\n+++ b/drivers/net/bnxt/bnxt_rxr.h\n@@ -238,4 +238,6 @@ void bnxt_set_mark_in_mbuf(struct bnxt *bp,\n #define BNXT_CFA_META_EEM_TCAM_SHIFT\t\t31\n #define BNXT_CFA_META_EM_TEST(x) ((x) >> BNXT_CFA_META_EEM_TCAM_SHIFT)\n \n+#define BNXT_PTYPE_TBL_DIM\t128\n+extern uint32_t bnxt_ptype_table[BNXT_PTYPE_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 7f3eabcda1..fade67ec8e 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c\n@@ -93,61 +93,27 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)\n }\n \n static uint32_t\n-bnxt_parse_pkt_type(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1)\n+bnxt_parse_pkt_type(uint32x4_t mm_rxcmp, uint32x4_t mm_rxcmp1)\n {\n-\tuint32_t l3, pkt_type = 0;\n-\tuint32_t t_ipcs = 0, ip6 = 0, vlan = 0;\n-\tuint32_t flags_type;\n-\n-\tvlan = !!(rxcmp1->flags2 &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN));\n-\tpkt_type |= vlan ? RTE_PTYPE_L2_ETHER_VLAN : RTE_PTYPE_L2_ETHER;\n-\n-\tt_ipcs = !!(rxcmp1->flags2 &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC));\n-\tip6 = !!(rxcmp1->flags2 &\n-\t\t rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_TYPE));\n-\n-\tflags_type = rxcmp->flags_type &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS_ITYPE_MASK);\n-\n-\tif (!t_ipcs && !ip6)\n-\t\tl3 = RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;\n-\telse if (!t_ipcs && ip6)\n-\t\tl3 = RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;\n-\telse if (t_ipcs && !ip6)\n-\t\tl3 = RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;\n-\telse\n-\t\tl3 = RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;\n-\n-\tswitch (flags_type) {\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_ICMP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_ICMP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_ICMP;\n-\t\tbreak;\n+\tuint32_t flags_type, flags2;\n+\tuint8_t index;\n \n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_TCP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_TCP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_TCP;\n-\t\tbreak;\n+\tflags_type = vgetq_lane_u32(mm_rxcmp, 0);\n+\tflags2 = (uint16_t)vgetq_lane_u32(mm_rxcmp1, 0);\n \n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_UDP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_UDP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_UDP;\n-\t\tbreak;\n-\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_IP):\n-\t\tpkt_type |= l3;\n-\t\tbreak;\n-\t}\n+\t/*\n+\t * Index format:\n+\t *     bit 0: RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC\n+\t *     bit 1: RX_CMPL_FLAGS2_IP_TYPE\n+\t *     bit 2: RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN\n+\t *     bits 3-6: RX_PKT_CMPL_FLAGS_ITYPE\n+\t */\n+\tindex = ((flags_type & RX_PKT_CMPL_FLAGS_ITYPE_MASK) >> 9) |\n+\t\t((flags2 & (RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN |\n+\t\t\t   RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC)) >> 2) |\n+\t\t((flags2 & RX_PKT_CMPL_FLAGS2_IP_TYPE) >> 7);\n \n-\treturn pkt_type;\n+\treturn bnxt_ptype_table[index];\n }\n \n static void\n@@ -234,10 +200,12 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \n \t/* Handle RX burst request */\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\tstruct rte_mbuf *mbuf;\n-\t\tuint64x2_t mm_rxcmp;\n-\t\tuint8x16_t pkt_mb;\n+\t\tuint32x4_t pkt_mb;\n+\t\tuint8x16_t tmp;\n+\t\tuint32_t ptype;\n \n \t\tcons = RING_CMP(cpr->cp_ring_struct, raw_cons);\n \n@@ -247,6 +215,8 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\tif (!CMP_VALID(rxcmp1, raw_cons + 1, cpr->cp_ring_struct))\n \t\t\tbreak;\n \n+\t\tmm_rxcmp = vld1q_u32((uint32_t *)rxcmp);\n+\t\tmm_rxcmp1 = vld1q_u32((uint32_t *)rxcmp);\n \t\traw_cons += 2;\n \t\tcons = rxcmp->opaque;\n \n@@ -258,10 +228,12 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\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+\t\ttmp = vqtbl1q_u8(vreinterpretq_u8_u32(mm_rxcmp), shuf_msk);\n+\t\tpkt_mb = vreinterpretq_u32_u8(tmp);\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 \n \t\trte_compiler_barrier();\n \n@@ -279,8 +251,6 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\t}\n \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 \ndiff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\nindex eced74e4e3..69ffbe4cc9 100644\n--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c\n@@ -96,62 +96,28 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr)\n \trxq->rxrearm_nb -= nb;\n }\n \n-static uint32_t\n-bnxt_parse_pkt_type(struct rx_pkt_cmpl *rxcmp, struct rx_pkt_cmpl_hi *rxcmp1)\n+static __m128i\n+bnxt_parse_pkt_type(__m128i mm_rxcmp, __m128i mm_rxcmp1)\n {\n-\tuint32_t l3, pkt_type = 0;\n-\tuint32_t t_ipcs = 0, ip6 = 0, vlan = 0;\n-\tuint32_t flags_type;\n-\n-\tvlan = !!(rxcmp1->flags2 &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN));\n-\tpkt_type |= vlan ? RTE_PTYPE_L2_ETHER_VLAN : RTE_PTYPE_L2_ETHER;\n-\n-\tt_ipcs = !!(rxcmp1->flags2 &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC));\n-\tip6 = !!(rxcmp1->flags2 &\n-\t\t rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_TYPE));\n-\n-\tflags_type = rxcmp->flags_type &\n-\t\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS_ITYPE_MASK);\n-\n-\tif (!t_ipcs && !ip6)\n-\t\tl3 = RTE_PTYPE_L3_IPV4_EXT_UNKNOWN;\n-\telse if (!t_ipcs && ip6)\n-\t\tl3 = RTE_PTYPE_L3_IPV6_EXT_UNKNOWN;\n-\telse if (t_ipcs && !ip6)\n-\t\tl3 = RTE_PTYPE_INNER_L3_IPV4_EXT_UNKNOWN;\n-\telse\n-\t\tl3 = RTE_PTYPE_INNER_L3_IPV6_EXT_UNKNOWN;\n-\n-\tswitch (flags_type) {\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_ICMP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_ICMP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_ICMP;\n-\t\tbreak;\n-\n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_TCP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_TCP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_TCP;\n-\t\tbreak;\n+\tuint32_t flags_type, flags2;\n+\tuint8_t index;\n \n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_UDP):\n-\t\tif (!t_ipcs)\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_L4_UDP;\n-\t\telse\n-\t\t\tpkt_type |= l3 | RTE_PTYPE_INNER_L4_UDP;\n-\t\tbreak;\n+\tflags_type = _mm_extract_epi16(mm_rxcmp, 0);\n+\tflags2 = _mm_extract_epi32(mm_rxcmp1, 0);\n \n-\tcase RTE_LE32(RX_PKT_CMPL_FLAGS_ITYPE_IP):\n-\t\tpkt_type |= l3;\n-\t\tbreak;\n-\t}\n+\t/*\n+\t * Index format:\n+\t *     bit 0: RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC\n+\t *     bit 1: RX_CMPL_FLAGS2_IP_TYPE\n+\t *     bit 2: RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN\n+\t *     bits 3-6: RX_PKT_CMPL_FLAGS_ITYPE\n+\t */\n+\tindex = ((flags_type & RX_PKT_CMPL_FLAGS_ITYPE_MASK) >> 9) |\n+\t\t((flags2 & (RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN |\n+\t\t\t   RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC)) >> 2) |\n+\t\t((flags2 & RX_PKT_CMPL_FLAGS2_IP_TYPE) >> 7);\n \n-\treturn pkt_type;\n+\treturn _mm_set_epi32(0, 0, 0, bnxt_ptype_table[index]);\n }\n \n static void\n@@ -242,7 +208,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, pkt_mb;\n+\t\t__m128i mm_rxcmp, mm_rxcmp1, pkt_mb, ptype;\n \n \t\tcons = RING_CMP(cpr->cp_ring_struct, raw_cons);\n \n@@ -252,6 +218,9 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\tif (!CMP_VALID(rxcmp1, raw_cons + 1, cpr->cp_ring_struct))\n \t\t\tbreak;\n \n+\t\tmm_rxcmp = _mm_load_si128((__m128i *)rxcmp);\n+\t\tmm_rxcmp1 = _mm_load_si128((__m128i *)rxcmp1);\n+\n \t\traw_cons += 2;\n \t\tcons = rxcmp->opaque;\n \n@@ -263,8 +232,10 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\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\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 \n \t\trte_compiler_barrier();\n@@ -283,8 +254,6 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n \t\t}\n \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 \n",
    "prefixes": [
        "08/12"
    ]
}