get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 89376,
    "url": "https://patches.dpdk.org/api/patches/89376/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1615974620-50092-3-git-send-email-humin29@huawei.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1615974620-50092-3-git-send-email-humin29@huawei.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1615974620-50092-3-git-send-email-humin29@huawei.com",
    "date": "2021-03-17T09:50:14",
    "name": "[v4,2/8] net/hns3: support for outer UDP cksum",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "6c114f0e5dcf80c9dd63e4a61470cdf2cd603148",
    "submitter": {
        "id": 1944,
        "url": "https://patches.dpdk.org/api/people/1944/?format=api",
        "name": "humin (Q)",
        "email": "humin29@huawei.com"
    },
    "delegate": {
        "id": 319,
        "url": "https://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1615974620-50092-3-git-send-email-humin29@huawei.com/mbox/",
    "series": [
        {
            "id": 15737,
            "url": "https://patches.dpdk.org/api/series/15737/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=15737",
            "date": "2021-03-17T09:50:12",
            "name": "features and bugfixes for hns3",
            "version": 4,
            "mbox": "https://patches.dpdk.org/series/15737/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/89376/comments/",
    "check": "success",
    "checks": "https://patches.dpdk.org/api/patches/89376/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id CD5A5A00C2;\n\tWed, 17 Mar 2021 10:49:59 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 164C6140F2B;\n\tWed, 17 Mar 2021 10:49:51 +0100 (CET)",
            "from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191])\n by mails.dpdk.org (Postfix) with ESMTP id 52F93140EEB\n for <dev@dpdk.org>; Wed, 17 Mar 2021 10:49:47 +0100 (CET)",
            "from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.59])\n by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4F0lh85SLqzrXnx\n for <dev@dpdk.org>; Wed, 17 Mar 2021 17:47:52 +0800 (CST)",
            "from localhost.localdomain (10.69.192.56) by\n DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id\n 14.3.498.0; Wed, 17 Mar 2021 17:49:44 +0800"
        ],
        "From": "\"Min Hu (Connor)\" <humin29@huawei.com>",
        "To": "<dev@dpdk.org>",
        "CC": "<ferruh.yigit@intel.com>",
        "Date": "Wed, 17 Mar 2021 17:50:14 +0800",
        "Message-ID": "<1615974620-50092-3-git-send-email-humin29@huawei.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1615974620-50092-1-git-send-email-humin29@huawei.com>",
        "References": "<1615357493-42394-1-git-send-email-humin29@huawei.com>\n <1615974620-50092-1-git-send-email-humin29@huawei.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[10.69.192.56]",
        "X-CFilter-Loop": "Reflected",
        "Subject": "[dpdk-dev] [PATCH v4 2/8] net/hns3: support for outer UDP cksum",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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": "From: Chengchang Tang <tangchengchang@huawei.com>\n\nKunpeng930 support outer UDP cksum, this patch add support for it.\n\nSigned-off-by: Chengchang Tang <tangchengchang@huawei.com>\nSigned-off-by: Min Hu (Connor) <humin29@huawei.com>\n---\n doc/guides/rel_notes/release_21_05.rst |  1 +\n drivers/net/hns3/hns3_cmd.c            |  3 ++\n drivers/net/hns3/hns3_ethdev.c         |  3 ++\n drivers/net/hns3/hns3_ethdev.h         |  4 ++\n drivers/net/hns3/hns3_ethdev_vf.c      |  3 ++\n drivers/net/hns3/hns3_rxtx.c           | 85 +++++++++++++++++++++++++++-------\n drivers/net/hns3/hns3_rxtx.h           |  4 +-\n drivers/net/hns3/hns3_rxtx_vec_sve.c   |  5 +-\n 8 files changed, 89 insertions(+), 19 deletions(-)",
    "diff": "diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst\nindex 1d85942..c3324d8 100644\n--- a/doc/guides/rel_notes/release_21_05.rst\n+++ b/doc/guides/rel_notes/release_21_05.rst\n@@ -61,6 +61,7 @@ New Features\n   * Added support for freeing Tx mbuf on demand.\n   * Added support for copper port in Kunpeng930.\n   * Added support for runtime config to select IO burst function.\n+  * Added support for outer UDP checksum in Kunpeng930.\n \n * **Updated NXP DPAA2 driver.**\n \ndiff --git a/drivers/net/hns3/hns3_cmd.c b/drivers/net/hns3/hns3_cmd.c\nindex 8b9f075..03f8048 100644\n--- a/drivers/net/hns3/hns3_cmd.c\n+++ b/drivers/net/hns3/hns3_cmd.c\n@@ -433,6 +433,9 @@ hns3_parse_capability(struct hns3_hw *hw,\n \tif (hns3_get_bit(caps, HNS3_CAPS_RXD_ADV_LAYOUT_B))\n \t\thns3_set_bit(hw->capability, HNS3_DEV_SUPPORT_RXD_ADV_LAYOUT_B,\n \t\t\t     1);\n+\tif (hns3_get_bit(caps, HNS3_CAPS_UDP_TUNNEL_CSUM_B))\n+\t\thns3_set_bit(hw->capability,\n+\t\t\t\tHNS3_DEV_SUPPORT_OUTER_UDP_CKSUM_B, 1);\n }\n \n static uint32_t\ndiff --git a/drivers/net/hns3/hns3_ethdev.c b/drivers/net/hns3/hns3_ethdev.c\nindex 28aa27a..3949153 100644\n--- a/drivers/net/hns3/hns3_ethdev.c\n+++ b/drivers/net/hns3/hns3_ethdev.c\n@@ -2620,6 +2620,9 @@ hns3_dev_infos_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *info)\n \t\t\t\t DEV_TX_OFFLOAD_MBUF_FAST_FREE |\n \t\t\t\t hns3_txvlan_cap_get(hw));\n \n+\tif (hns3_dev_outer_udp_cksum_supported(hw))\n+\t\tinfo->tx_offload_capa |= DEV_TX_OFFLOAD_OUTER_UDP_CKSUM;\n+\n \tif (hns3_dev_indep_txrx_supported(hw))\n \t\tinfo->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |\n \t\t\t\t RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;\ndiff --git a/drivers/net/hns3/hns3_ethdev.h b/drivers/net/hns3/hns3_ethdev.h\nindex ec4b475..0fc0a1c 100644\n--- a/drivers/net/hns3/hns3_ethdev.h\n+++ b/drivers/net/hns3/hns3_ethdev.h\n@@ -798,6 +798,7 @@ enum {\n #define HNS3_DEV_SUPPORT_INDEP_TXRX_B\t\t0x6\n #define HNS3_DEV_SUPPORT_STASH_B\t\t0x7\n #define HNS3_DEV_SUPPORT_RXD_ADV_LAYOUT_B\t0x9\n+#define HNS3_DEV_SUPPORT_OUTER_UDP_CKSUM_B\t0xA\n \n #define hns3_dev_dcb_supported(hw) \\\n \thns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_DCB_B)\n@@ -831,6 +832,9 @@ enum {\n #define hns3_dev_rxd_adv_layout_supported(hw) \\\n \thns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_RXD_ADV_LAYOUT_B)\n \n+#define hns3_dev_outer_udp_cksum_supported(hw) \\\n+\thns3_get_bit((hw)->capability, HNS3_DEV_SUPPORT_OUTER_UDP_CKSUM_B)\n+\n #define HNS3_DEV_PRIVATE_TO_HW(adapter) \\\n \t(&((struct hns3_adapter *)adapter)->hw)\n #define HNS3_DEV_PRIVATE_TO_PF(adapter) \\\ndiff --git a/drivers/net/hns3/hns3_ethdev_vf.c b/drivers/net/hns3/hns3_ethdev_vf.c\nindex f3eaefb..e1e41b8 100644\n--- a/drivers/net/hns3/hns3_ethdev_vf.c\n+++ b/drivers/net/hns3/hns3_ethdev_vf.c\n@@ -988,6 +988,9 @@ hns3vf_dev_infos_get(struct rte_eth_dev *eth_dev, struct rte_eth_dev_info *info)\n \t\t\t\t DEV_TX_OFFLOAD_MBUF_FAST_FREE |\n \t\t\t\t hns3_txvlan_cap_get(hw));\n \n+\tif (hns3_dev_outer_udp_cksum_supported(hw))\n+\t\tinfo->tx_offload_capa |= DEV_TX_OFFLOAD_OUTER_UDP_CKSUM;\n+\n \tif (hns3_dev_indep_txrx_supported(hw))\n \t\tinfo->dev_capa = RTE_ETH_DEV_CAPA_RUNTIME_RX_QUEUE_SETUP |\n \t\t\t\t RTE_ETH_DEV_CAPA_RUNTIME_TX_QUEUE_SETUP;\ndiff --git a/drivers/net/hns3/hns3_rxtx.c b/drivers/net/hns3/hns3_rxtx.c\nindex f5c7d71..7529279 100644\n--- a/drivers/net/hns3/hns3_rxtx.c\n+++ b/drivers/net/hns3/hns3_rxtx.c\n@@ -2967,7 +2967,7 @@ hns3_fill_first_desc(struct hns3_tx_queue *txq, struct hns3_desc *desc,\n \thdr_len += (ol_flags & PKT_TX_TUNNEL_MASK) ?\n \t\t\t   rxm->outer_l2_len + rxm->outer_l3_len : 0;\n \tpaylen = rxm->pkt_len - hdr_len;\n-\tdesc->tx.paylen = rte_cpu_to_le_32(paylen);\n+\tdesc->tx.paylen_fd_dop_ol4cs |= rte_cpu_to_le_32(paylen);\n \thns3_set_tso(desc, paylen, rxm);\n \n \t/*\n@@ -3204,8 +3204,10 @@ hns3_parse_tunneling_params(struct hns3_tx_queue *txq, struct rte_mbuf *m,\n {\n \tstruct hns3_desc *tx_ring = txq->tx_ring;\n \tstruct hns3_desc *desc = &tx_ring[tx_desc_id];\n+\tuint64_t ol_flags = m->ol_flags;\n \tuint32_t tmp_outer = 0;\n \tuint32_t tmp_inner = 0;\n+\tuint32_t tmp_ol4cs;\n \tint ret;\n \n \t/*\n@@ -3215,7 +3217,7 @@ hns3_parse_tunneling_params(struct hns3_tx_queue *txq, struct rte_mbuf *m,\n \t * calculations, the length of the L2 header include the outer and\n \t * inner, will be filled during the parsing of tunnel packects.\n \t */\n-\tif (!(m->ol_flags & PKT_TX_TUNNEL_MASK)) {\n+\tif (!(ol_flags & PKT_TX_TUNNEL_MASK)) {\n \t\t/*\n \t\t * For non tunnel type the tunnel type id is 0, so no need to\n \t\t * assign a value to it. Only the inner(normal) L2 header length\n@@ -3230,7 +3232,8 @@ hns3_parse_tunneling_params(struct hns3_tx_queue *txq, struct rte_mbuf *m,\n \t\t * inner l2_len. It would lead a cksum error. So driver has to\n \t\t * calculate the header length.\n \t\t */\n-\t\tif (unlikely(!(m->ol_flags & PKT_TX_OUTER_IP_CKSUM) &&\n+\t\tif (unlikely(!(ol_flags &\n+\t\t\t(PKT_TX_OUTER_IP_CKSUM | PKT_TX_OUTER_UDP_CKSUM)) &&\n \t\t\t\t\tm->outer_l2_len == 0)) {\n \t\t\tstruct rte_net_hdr_lens hdr_len;\n \t\t\t(void)rte_net_get_ptype(m, &hdr_len,\n@@ -3247,6 +3250,9 @@ hns3_parse_tunneling_params(struct hns3_tx_queue *txq, struct rte_mbuf *m,\n \n \tdesc->tx.ol_type_vlan_len_msec = rte_cpu_to_le_32(tmp_outer);\n \tdesc->tx.type_cs_vlan_tso_len = rte_cpu_to_le_32(tmp_inner);\n+\ttmp_ol4cs = ol_flags & PKT_TX_OUTER_UDP_CKSUM ?\n+\t\t\tBIT(HNS3_TXD_OL4CS_B) : 0;\n+\tdesc->tx.paylen_fd_dop_ol4cs = rte_cpu_to_le_32(tmp_ol4cs);\n \n \treturn 0;\n }\n@@ -3376,31 +3382,78 @@ hns3_pkt_need_linearized(struct rte_mbuf *tx_pkts, uint32_t bd_num,\n \treturn false;\n }\n \n+static bool\n+hns3_outer_ipv4_cksum_prepared(struct rte_mbuf *m, uint64_t ol_flags,\n+\t\t\t\tuint32_t *l4_proto)\n+{\n+\tstruct rte_ipv4_hdr *ipv4_hdr;\n+\tipv4_hdr = rte_pktmbuf_mtod_offset(m, struct rte_ipv4_hdr *,\n+\t\t\t\t\t   m->outer_l2_len);\n+\tif (ol_flags & PKT_TX_OUTER_IP_CKSUM)\n+\t\tipv4_hdr->hdr_checksum = 0;\n+\tif (ol_flags & PKT_TX_OUTER_UDP_CKSUM) {\n+\t\tstruct rte_udp_hdr *udp_hdr;\n+\t\t/*\n+\t\t * If OUTER_UDP_CKSUM is support, HW can caclulate the pseudo\n+\t\t * header for TSO packets\n+\t\t */\n+\t\tif (ol_flags & PKT_TX_TCP_SEG)\n+\t\t\treturn true;\n+\t\tudp_hdr = rte_pktmbuf_mtod_offset(m, struct rte_udp_hdr *,\n+\t\t\t\tm->outer_l2_len + m->outer_l3_len);\n+\t\tudp_hdr->dgram_cksum = rte_ipv4_phdr_cksum(ipv4_hdr, ol_flags);\n+\n+\t\treturn true;\n+\t}\n+\t*l4_proto = ipv4_hdr->next_proto_id;\n+\treturn false;\n+}\n+\n+static bool\n+hns3_outer_ipv6_cksum_prepared(struct rte_mbuf *m, uint64_t ol_flags,\n+\t\t\t\tuint32_t *l4_proto)\n+{\n+\tstruct rte_ipv6_hdr *ipv6_hdr;\n+\tipv6_hdr = rte_pktmbuf_mtod_offset(m, struct rte_ipv6_hdr *,\n+\t\t\t\t\t   m->outer_l2_len);\n+\tif (ol_flags & PKT_TX_OUTER_UDP_CKSUM) {\n+\t\tstruct rte_udp_hdr *udp_hdr;\n+\t\t/*\n+\t\t * If OUTER_UDP_CKSUM is support, HW can caclulate the pseudo\n+\t\t * header for TSO packets\n+\t\t */\n+\t\tif (ol_flags & PKT_TX_TCP_SEG)\n+\t\t\treturn true;\n+\t\tudp_hdr = rte_pktmbuf_mtod_offset(m, struct rte_udp_hdr *,\n+\t\t\t\tm->outer_l2_len + m->outer_l3_len);\n+\t\tudp_hdr->dgram_cksum = rte_ipv6_phdr_cksum(ipv6_hdr, ol_flags);\n+\n+\t\treturn true;\n+\t}\n+\t*l4_proto = ipv6_hdr->proto;\n+\treturn false;\n+}\n+\n static void\n hns3_outer_header_cksum_prepare(struct rte_mbuf *m)\n {\n \tuint64_t ol_flags = m->ol_flags;\n \tuint32_t paylen, hdr_len, l4_proto;\n+\tstruct rte_udp_hdr *udp_hdr;\n \n \tif (!(ol_flags & (PKT_TX_OUTER_IPV4 | PKT_TX_OUTER_IPV6)))\n \t\treturn;\n \n \tif (ol_flags & PKT_TX_OUTER_IPV4) {\n-\t\tstruct rte_ipv4_hdr *ipv4_hdr;\n-\t\tipv4_hdr = rte_pktmbuf_mtod_offset(m, struct rte_ipv4_hdr *,\n-\t\t\t\t\t\t   m->outer_l2_len);\n-\t\tl4_proto = ipv4_hdr->next_proto_id;\n-\t\tif (ol_flags & PKT_TX_OUTER_IP_CKSUM)\n-\t\t\tipv4_hdr->hdr_checksum = 0;\n+\t\tif (hns3_outer_ipv4_cksum_prepared(m, ol_flags, &l4_proto))\n+\t\t\treturn;\n \t} else {\n-\t\tstruct rte_ipv6_hdr *ipv6_hdr;\n-\t\tipv6_hdr = rte_pktmbuf_mtod_offset(m, struct rte_ipv6_hdr *,\n-\t\t\t\t\t\t   m->outer_l2_len);\n-\t\tl4_proto = ipv6_hdr->proto;\n+\t\tif (hns3_outer_ipv6_cksum_prepared(m, ol_flags, &l4_proto))\n+\t\t\treturn;\n \t}\n+\n \t/* driver should ensure the outer udp cksum is 0 for TUNNEL TSO */\n \tif (l4_proto == IPPROTO_UDP && (ol_flags & PKT_TX_TCP_SEG)) {\n-\t\tstruct rte_udp_hdr *udp_hdr;\n \t\thdr_len = m->l2_len + m->l3_len + m->l4_len;\n \t\thdr_len += m->outer_l2_len + m->outer_l3_len;\n \t\tpaylen = m->pkt_len - hdr_len;\n@@ -3686,7 +3739,7 @@ hns3_tx_setup_4bd(struct hns3_desc *txdp, struct rte_mbuf **pkts)\n \t\tdma_addr = rte_mbuf_data_iova(*pkts);\n \t\ttxdp->addr = rte_cpu_to_le_64(dma_addr);\n \t\ttxdp->tx.send_size = rte_cpu_to_le_16((*pkts)->data_len);\n-\t\ttxdp->tx.paylen = 0;\n+\t\ttxdp->tx.paylen_fd_dop_ol4cs = 0;\n \t\ttxdp->tx.type_cs_vlan_tso_len = 0;\n \t\ttxdp->tx.ol_type_vlan_len_msec = 0;\n \t\ttxdp->tx.tp_fe_sc_vld_ra_ri = rte_cpu_to_le_16(bd_flag);\n@@ -3702,7 +3755,7 @@ hns3_tx_setup_1bd(struct hns3_desc *txdp, struct rte_mbuf **pkts)\n \tdma_addr = rte_mbuf_data_iova(*pkts);\n \ttxdp->addr = rte_cpu_to_le_64(dma_addr);\n \ttxdp->tx.send_size = rte_cpu_to_le_16((*pkts)->data_len);\n-\ttxdp->tx.paylen = 0;\n+\ttxdp->tx.paylen_fd_dop_ol4cs = 0;\n \ttxdp->tx.type_cs_vlan_tso_len = 0;\n \ttxdp->tx.ol_type_vlan_len_msec = 0;\n \ttxdp->tx.tp_fe_sc_vld_ra_ri = rte_cpu_to_le_16(bd_flag);\ndiff --git a/drivers/net/hns3/hns3_rxtx.h b/drivers/net/hns3/hns3_rxtx.h\nindex 9adeb24..cd04200 100644\n--- a/drivers/net/hns3/hns3_rxtx.h\n+++ b/drivers/net/hns3/hns3_rxtx.h\n@@ -149,6 +149,7 @@\n #define HNS3_TXD_MSS_S\t\t\t\t0\n #define HNS3_TXD_MSS_M\t\t\t\t(0x3fff << HNS3_TXD_MSS_S)\n \n+#define HNS3_TXD_OL4CS_B\t\t\t22\n #define HNS3_L2_LEN_UNIT\t\t\t1UL\n #define HNS3_L3_LEN_UNIT\t\t\t2UL\n #define HNS3_L4_LEN_UNIT\t\t\t2UL\n@@ -234,7 +235,7 @@ struct hns3_desc {\n \t\t\t\t};\n \t\t\t};\n \n-\t\t\tuint32_t paylen;\n+\t\t\tuint32_t paylen_fd_dop_ol4cs;\n \t\t\tuint16_t tp_fe_sc_vld_ra_ri;\n \t\t\tuint16_t mss;\n \t\t} tx;\n@@ -503,6 +504,7 @@ struct hns3_queue_info {\n };\n \n #define HNS3_TX_CKSUM_OFFLOAD_MASK ( \\\n+\tPKT_TX_OUTER_UDP_CKSUM | \\\n \tPKT_TX_OUTER_IP_CKSUM | \\\n \tPKT_TX_IP_CKSUM | \\\n \tPKT_TX_TCP_SEG | \\\ndiff --git a/drivers/net/hns3/hns3_rxtx_vec_sve.c b/drivers/net/hns3/hns3_rxtx_vec_sve.c\nindex 2a22a1a..90e45c6 100644\n--- a/drivers/net/hns3/hns3_rxtx_vec_sve.c\n+++ b/drivers/net/hns3/hns3_rxtx_vec_sve.c\n@@ -408,8 +408,9 @@ hns3_tx_fill_hw_ring_sve(struct hns3_tx_queue *txq,\n \t\t\t\t(uint64_t *)&txdp->tx.outer_vlan_tag,\n \t\t\t\toffsets, svdup_n_u64(0));\n \t\t/* save offset 24~31byte of every BD */\n-\t\tsvst1_scatter_u64offset_u64(pg, (uint64_t *)&txdp->tx.paylen,\n-\t\t\t\t\t    offsets, svdup_n_u64(valid_bit));\n+\t\tsvst1_scatter_u64offset_u64(pg,\n+\t\t\t\t(uint64_t *)&txdp->tx.paylen_fd_dop_ol4cs,\n+\t\t\t\toffsets, svdup_n_u64(valid_bit));\n \n \t\t/* Increment bytes counter */\n \t\tuint32_t idx;\n",
    "prefixes": [
        "v4",
        "2/8"
    ]
}