get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 14630,
    "url": "https://patches.dpdk.org/api/patches/14630/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1467893942-4048-1-git-send-email-olivier.matz@6wind.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": "<1467893942-4048-1-git-send-email-olivier.matz@6wind.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1467893942-4048-1-git-send-email-olivier.matz@6wind.com",
    "date": "2016-07-07T12:19:02",
    "name": "[dpdk-dev] ixgbe: support checksum flags in sse vector Rx function",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "a49d300329316a9ae7ae8e7b10b4f26705f70b0f",
    "submitter": {
        "id": 8,
        "url": "https://patches.dpdk.org/api/people/8/?format=api",
        "name": "Olivier Matz",
        "email": "olivier.matz@6wind.com"
    },
    "delegate": {
        "id": 10,
        "url": "https://patches.dpdk.org/api/users/10/?format=api",
        "username": "bruce",
        "first_name": "Bruce",
        "last_name": "Richardson",
        "email": "bruce.richardson@intel.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1467893942-4048-1-git-send-email-olivier.matz@6wind.com/mbox/",
    "series": [],
    "comments": "https://patches.dpdk.org/api/patches/14630/comments/",
    "check": "pending",
    "checks": "https://patches.dpdk.org/api/patches/14630/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 395462A5D;\n\tThu,  7 Jul 2016 14:19:43 +0200 (CEST)",
            "from proxy.6wind.com (host.76.145.23.62.rev.coltfrance.com\n\t[62.23.145.76]) by dpdk.org (Postfix) with ESMTP id 61B852946\n\tfor <dev@dpdk.org>; Thu,  7 Jul 2016 14:19:42 +0200 (CEST)",
            "from glumotte.dev.6wind.com (unknown [10.16.0.195])\n\tby proxy.6wind.com (Postfix) with ESMTP id 48C642492C;\n\tThu,  7 Jul 2016 14:19:42 +0200 (CEST)"
        ],
        "From": "Olivier Matz <olivier.matz@6wind.com>",
        "To": "dev@dpdk.org,\n\tkonstantin.ananyev@intel.com,\n\thelin.zhang@intel.com",
        "Cc": "bruce.richardson@intel.com,\n\tMaxime Leroy <maxime.leroy@6wind.com>",
        "Date": "Thu,  7 Jul 2016 14:19:02 +0200",
        "Message-Id": "<1467893942-4048-1-git-send-email-olivier.matz@6wind.com>",
        "X-Mailer": "git-send-email 2.8.1",
        "Subject": "[dpdk-dev] [PATCH] ixgbe: support checksum flags in sse vector Rx\n\tfunction",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Update desc_to_olflags_v() to set PKT_RX_IP_CKSUM_BAD and\nPKT_RX_L4_CKSUM_BAD in the ol_fags of the mbuf.\n\nThe Rx vector function can now be used with hw_ip_checksum\nenabled.\n\nTested with:\n\n  cd dpdk.org/\n  make config T=x86_64-native-linuxapp-gcc\n  make -j32\n  mkdir -p /mnt/huge\n  mount -t hugetlbfs nodev /mnt/huge\n  echo 256 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages\n  modprobe uio_pci_generic\n  python tools/dpdk_nic_bind.py -b uio_pci_generic 0000:04:00.0\n  ./build/app/testpmd -l 2,4 -- --total-num-mbufs=65536 -i --port-topology=chained --enable-rx-cksum --disable-hw-vlan-filter --disable-hw-vlan-strip\n    set fwd rxonly\n    set verbose 1\n    start\n\n  # send packets to testpmd using scapy\n  eh = Ether(src=\"00:01:02:03:04:05\", dst=\"00:1B:21:AB:8F:10\")\n  p = Ether()/IP(src=\"1.1.1.1\", dst=\"1.1.1.2\")/UDP()/Raw(\"x\"*50)\n  sendp(p, iface=\"ixgbe2\")\n  p = Ether()/IP(src=\"1.1.1.1\", dst=\"1.1.1.2\", chksum=42)/UDP()/Raw(\"x\"*50)\n  sendp(p, iface=\"ixgbe2\")\n  p = Ether()/IP(src=\"1.1.1.1\", dst=\"1.1.1.2\")/UDP(chksum=42)/Raw(\"x\"*50)\n  sendp(p, iface=\"ixgbe2\")\n  p = Ether()/IP(src=\"1.1.1.1\", dst=\"1.1.1.2\", chksum=45)/UDP(chksum=42)/Raw(\"x\"*50)\n  sendp(p, iface=\"ixgbe2\")\n\n  # result\n  port 0/queue 0: received 1 packets\n    src=00:01:02:03:04:05 - dst=00:1B:21:AB:8F:10 - type=0x0800 - length=92 - nb_segs=1Unknown packet type\n   - Receive queue=0x0\n  port 0/queue 0: received 1 packets\n    src=00:01:02:03:04:05 - dst=00:1B:21:AB:8F:10 - type=0x0800 - length=92 - nb_segs=1Unknown packet type\n   - Receive queue=0x0\n    PKT_RX_IP_CKSUM_BAD\n  port 0/queue 0: received 1 packets\n    src=00:01:02:03:04:05 - dst=00:1B:21:AB:8F:10 - type=0x0800 - length=92 - nb_segs=1Unknown packet type\n   - Receive queue=0x0\n    PKT_RX_L4_CKSUM_BAD\n  port 0/queue 0: received 1 packets\n    src=00:01:02:03:04:05 - dst=00:1B:21:AB:8F:10 - type=0x0800 - length=92 - nb_segs=1Unknown packet type\n   - Receive queue=0x0\n    PKT_RX_L4_CKSUM_BAD\n    PKT_RX_IP_CKSUM_BAD\n\nSigned-off-by: Maxime Leroy <maxime.leroy@6wind.com>\nSigned-off-by: Olivier Matz <olivier.matz@6wind.com>\n---\n drivers/net/ixgbe/ixgbe_rxtx_vec_common.h |  8 ++---\n drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c   |  6 ++++\n drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c    | 50 +++++++++++++++++++++----------\n 3 files changed, 42 insertions(+), 22 deletions(-)",
    "diff": "diff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h b/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h\nindex 62b8201..05f8185 100644\n--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h\n+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_common.h\n@@ -309,12 +309,8 @@ ixgbe_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev)\n \tif (fconf->mode != RTE_FDIR_MODE_NONE)\n \t\treturn -1;\n \n-\t/*\n-\t * - no csum error report support\n-\t * - no header split support\n-\t */\n-\tif (rxmode->hw_ip_checksum == 1 ||\n-\t    rxmode->header_split == 1)\n+\t/* no header split support */\n+\tif (rxmode->header_split == 1)\n \t\treturn -1;\n \n \treturn 0;\ndiff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c\nindex 64a329e..f96cc85 100644\n--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c\n+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_neon.c\n@@ -556,5 +556,11 @@ ixgbe_txq_vec_setup(struct ixgbe_tx_queue *txq)\n int __attribute__((cold))\n ixgbe_rx_vec_dev_conf_condition_check(struct rte_eth_dev *dev)\n {\n+\tstruct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;\n+\n+\t/* no csum error report support */\n+\tif (rxmode->hw_ip_checksum == 1)\n+\t\treturn -1;\n+\n \treturn ixgbe_rx_vec_dev_conf_condition_check_default(dev);\n }\ndiff --git a/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c b/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c\nindex 1c4fd7c..dc5657e 100644\n--- a/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c\n+++ b/drivers/net/ixgbe/ixgbe_rxtx_vec_sse.c\n@@ -145,7 +145,7 @@ static inline void\n desc_to_olflags_v(__m128i descs[4], uint8_t vlan_flags,\n \tstruct rte_mbuf **rx_pkts)\n {\n-\t__m128i ptype0, ptype1, vtag0, vtag1;\n+\t__m128i ptype0, ptype1, vtag0, vtag1, csum;\n \tunion {\n \t\tuint16_t e[4];\n \t\tuint64_t dword;\n@@ -162,18 +162,26 @@ desc_to_olflags_v(__m128i descs[4], uint8_t vlan_flags,\n \t\t\tPKT_RX_RSS_HASH, 0, PKT_RX_RSS_HASH, 0,\n \t\t\tPKT_RX_RSS_HASH, PKT_RX_RSS_HASH, PKT_RX_RSS_HASH, 0);\n \n-\t/* mask everything except vlan present bit */\n-\tconst __m128i vlan_msk = _mm_set_epi16(\n-\t\t\t0x0000, 0x0000,\n-\t\t\t0x0000, 0x0000,\n-\t\t\tIXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,\n-\t\t\tIXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP);\n-\t/* map vlan present (0x8) to ol_flags */\n-\tconst __m128i vlan_map = _mm_set_epi8(\n+\t/* mask everything except vlan present and l4/ip csum error */\n+\tconst __m128i vlan_csum_msk = _mm_set_epi16(\n+\t\t(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 16,\n+\t\t(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 16,\n+\t\t(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 16,\n+\t\t(IXGBE_RXDADV_ERR_TCPE | IXGBE_RXDADV_ERR_IPE) >> 16,\n+\t\tIXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP,\n+\t\tIXGBE_RXD_STAT_VP, IXGBE_RXD_STAT_VP);\n+\t/* map vlan present (0x8), IPE (0x2), L4E (0x1) to ol_flags */\n+\tconst __m128i vlan_csum_map = _mm_set_epi8(\n \t\t0, 0, 0, 0,\n-\t\t0, 0, 0, vlan_flags,\n+\t\tvlan_flags | PKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,\n+\t\tvlan_flags | PKT_RX_IP_CKSUM_BAD,\n+\t\tvlan_flags | PKT_RX_L4_CKSUM_BAD,\n+\t\tvlan_flags,\n \t\t0, 0, 0, 0,\n-\t\t0, 0, 0, 0);\n+\t\tPKT_RX_IP_CKSUM_BAD | PKT_RX_L4_CKSUM_BAD,\n+\t\tPKT_RX_IP_CKSUM_BAD,\n+\t\tPKT_RX_L4_CKSUM_BAD,\n+\t\t0);\n \n \tptype0 = _mm_unpacklo_epi16(descs[0], descs[1]);\n \tptype1 = _mm_unpacklo_epi16(descs[2], descs[3]);\n@@ -185,8 +193,21 @@ desc_to_olflags_v(__m128i descs[4], uint8_t vlan_flags,\n \tptype0 = _mm_shuffle_epi8(rss_flags, ptype0);\n \n \tvtag1 = _mm_unpacklo_epi32(vtag0, vtag1);\n-\tvtag1 = _mm_and_si128(vtag1, vlan_msk);\n-\tvtag1 = _mm_shuffle_epi8(vlan_map, vtag1);\n+\tvtag1 = _mm_and_si128(vtag1, vlan_csum_msk);\n+\n+\t/* csum bits are in the most significant, to use shuffle we need to\n+\t * shift them. Change mask to 0xc000 to 0x0003.\n+\t */\n+\tcsum = _mm_srli_epi16(vtag1, 14);\n+\n+\t/* now or the most significant 64 bits containing the checksum\n+\t * flags with the vlan present flags.\n+\t */\n+\tcsum = _mm_srli_si128(csum, 8);\n+\tvtag1 = _mm_or_si128(csum, vtag1);\n+\n+\t/* convert VP, IPE, L4E to ol_flags */\n+\tvtag1 = _mm_shuffle_epi8(vlan_csum_map, vtag1);\n \n \tvtag1 = _mm_or_si128(ptype0, vtag1);\n \tvol.dword = _mm_cvtsi128_si64(vtag1);\n@@ -210,7 +231,6 @@ desc_to_olflags_v(__m128i descs[4], uint8_t vlan_flags,\n  * - nb_pkts > RTE_IXGBE_MAX_RX_BURST, only scan RTE_IXGBE_MAX_RX_BURST\n  *   numbers of DD bit\n  * - floor align nb_pkts to a RTE_IXGBE_DESC_PER_LOOP power-of-two\n- * - don't support ol_flags for rss and csum err\n  */\n static inline uint16_t\n _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,\n@@ -425,7 +445,6 @@ _recv_raw_pkts_vec(struct ixgbe_rx_queue *rxq, struct rte_mbuf **rx_pkts,\n  * - nb_pkts > RTE_IXGBE_MAX_RX_BURST, only scan RTE_IXGBE_MAX_RX_BURST\n  *   numbers of DD bit\n  * - floor align nb_pkts to a RTE_IXGBE_DESC_PER_LOOP power-of-two\n- * - don't support ol_flags for rss and csum err\n  */\n uint16_t\n ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n@@ -438,7 +457,6 @@ ixgbe_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n  * vPMD receive routine that reassembles scattered packets\n  *\n  * Notice:\n- * - don't support ol_flags for rss and csum err\n  * - nb_pkts < RTE_IXGBE_DESCS_PER_LOOP, just return no packet\n  * - nb_pkts > RTE_IXGBE_MAX_RX_BURST, only scan RTE_IXGBE_MAX_RX_BURST\n  *   numbers of DD bit\n",
    "prefixes": [
        "dpdk-dev"
    ]
}