get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 56595,
    "url": "http://patches.dpdk.org/api/patches/56595/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190717104139.21155-7-ajit.khaparde@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": "<20190717104139.21155-7-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190717104139.21155-7-ajit.khaparde@broadcom.com",
    "date": "2019-07-17T10:41:30",
    "name": "[v3,06/15] net/bnxt: fix L4 checksum error indication in Rx path",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "1d421f3ea16de71898b984d9eef7b82ee815fbf2",
    "submitter": {
        "id": 501,
        "url": "http://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20190717104139.21155-7-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 5557,
            "url": "http://patches.dpdk.org/api/series/5557/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=5557",
            "date": "2019-07-17T10:41:24",
            "name": "bnxt patch series",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/5557/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/56595/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/56595/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 [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 07D0A1B970;\n\tWed, 17 Jul 2019 12:42:07 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n\t[192.19.229.170]) by dpdk.org (Postfix) with ESMTP id 5DCFD1B959;\n\tWed, 17 Jul 2019 12:41:59 +0200 (CEST)",
            "from nis-sj1-27.broadcom.com (nis-sj1-27.lvn.broadcom.net\n\t[10.75.144.136])\n\tby rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 18B1430C0A1;\n\tWed, 17 Jul 2019 03:41:58 -0700 (PDT)",
            "from C02VPB22HTD6.wifi.broadcom.net (c02vpb22htd6.wifi.broadcom.net\n\t[10.122.43.105])\n\tby nis-sj1-27.broadcom.com (Postfix) with ESMTP id 94308AC0749;\n\tWed, 17 Jul 2019 03:41:56 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 18B1430C0A1",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n\ts=dkimrelay; t=1563360118;\n\tbh=k/jgXiWhbpQiVPGfB1NU7HKTzdHmaXjeZCn+L/0MWL4=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=BAIfTFHatx7vJ2oTqimqgUjvtU6yhOP/Lh+KntofqbxumzoJ5CjhemlfTlgDWfgXP\n\tZztDNUhXH2OdKjlzXMfLc49IYRGy9YemqYcthGE0VUDQVunTHFf6aZ4BvpjO51qbzB\n\tUub/SR6s+QbPBsBl2uRhT90OOqkvWGKC6YvDNTkc=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, Rahul Gupta <rahul.gupta@broadcom.com>,\n\tstable@dpdk.org",
        "Date": "Wed, 17 Jul 2019 16:11:30 +0530",
        "Message-Id": "<20190717104139.21155-7-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.20.1 (Apple Git-117)",
        "In-Reply-To": "<20190717104139.21155-1-ajit.khaparde@broadcom.com>",
        "References": "<0c1b327c-2c36-652f-c88d-cbca8f873c13@intel.com>\n\t<20190717104139.21155-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH v3 06/15] net/bnxt: fix L4 checksum error\n\tindication in Rx path",
        "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\t<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\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Rahul Gupta <rahul.gupta@broadcom.com>\n\nUpdate ol_flags correctly for checksum errors in case of tunnel and\nnon-tunnel packet.\n\nFixes: 65ee636872eb (\"net/bnxt: fix Rx checksum flags\")\nCc: stable@dpdk.org\n\nSigned-off-by: Rahul Gupta <rahul.gupta@broadcom.com>\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n--\nv1->v3: Fix check-git-log output.\n---\n drivers/net/bnxt/bnxt_rxr.c |  43 ++++++++++---\n drivers/net/bnxt/bnxt_rxr.h | 120 ++++++++++++++++++++++++++++++------\n 2 files changed, 133 insertions(+), 30 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex 44303f3b0..54a2cf5fd 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -362,6 +362,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;\n \n \trxcmp = (struct rx_pkt_cmpl *)\n \t    &cpr->cp_desc_ring[cp_cons];\n@@ -440,19 +441,41 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \t\tmbuf->ol_flags |= PKT_RX_VLAN | PKT_RX_VLAN_STRIPPED;\n \t}\n \n-\tif (likely(RX_CMP_IP_CS_OK(rxcmp1)))\n-\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n-\telse if (likely(RX_CMP_IP_CS_UNKNOWN(rxcmp1)))\n-\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_UNKNOWN;\n-\telse\n+\tflags2_f = flags2_0xf(rxcmp1);\n+\t/* IP Checksum */\n+\tif (unlikely(((IS_IP_NONTUNNEL_PKT(flags2_f)) &&\n+\t\t      (RX_CMP_IP_CS_ERROR(rxcmp1))) ||\n+\t\t     (IS_IP_TUNNEL_PKT(flags2_f) &&\n+\t\t      (RX_CMP_IP_OUTER_CS_ERROR(rxcmp1))))) {\n \t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_BAD;\n+\t} else if (unlikely(RX_CMP_IP_CS_UNKNOWN(rxcmp1))) {\n+\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_UNKNOWN;\n+\t} else {\n+\t\tmbuf->ol_flags |= PKT_RX_IP_CKSUM_GOOD;\n+\t}\n \n-\tif (likely(RX_CMP_L4_CS_OK(rxcmp1)))\n-\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_GOOD;\n-\telse if (likely(RX_CMP_L4_CS_UNKNOWN(rxcmp1)))\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-\telse\n-\t\tmbuf->ol_flags |= PKT_RX_L4_CKSUM_BAD;\n+\t}\n \n \tmbuf->packet_type = bnxt_parse_pkt_type(rxcmp, rxcmp1);\n \ndiff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h\nindex 6523b94c6..6a80c37c8 100644\n--- a/drivers/net/bnxt/bnxt_rxr.h\n+++ b/drivers/net/bnxt/bnxt_rxr.h\n@@ -24,36 +24,116 @@\n #define BNXT_TPA_OUTER_L3_OFF(hdr_info)\t\\\n \t((hdr_info) & 0x1ff)\n \n-#define RX_CMP_L4_CS_BITS\t\\\n-\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_L4_CS_CALC | \\\n-\t\t\t RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC)\n-\n-#define RX_CMP_L4_CS_ERR_BITS\t\\\n-\trte_cpu_to_le_32(RX_PKT_CMPL_ERRORS_L4_CS_ERROR | \\\n-\t\t\t RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR)\n+#define flags2_0xf(rxcmp1)\t\\\n+\t(((rxcmp1)->flags2) & 0xf)\n \n-#define RX_CMP_L4_CS_OK(rxcmp1)\t\t\t\t\t\t\\\n-\t    (((rxcmp1)->flags2 & RX_CMP_L4_CS_BITS) &&\t\t\\\n-\t     !((rxcmp1)->errors_v2 & RX_CMP_L4_CS_ERR_BITS))\n+/* IP non tunnel can be with or without L4-\n+ * Ether / (vlan) / IP|IP6 / UDP|TCP|SCTP Or\n+ * Ether / (vlan) / outer IP|IP6 / ICMP\n+ * we use '==' instead of '&' because tunnel pkts have all 4 fields set.\n+ */\n+#define IS_IP_NONTUNNEL_PKT(flags2_f)\t\\\n+\t(\t\\\n+\t ((flags2_f) == \\\n+\t  (rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_CS_CALC))) ||\t\\\n+\t ((flags2_f) ==\t\\\n+\t  (rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_CS_CALC | \\\n+\t\t\t    RX_PKT_CMPL_FLAGS2_L4_CS_CALC))) \\\n+\t)\n+\n+/* IP Tunnel pkt must have atleast tunnel-IP-calc set.\n+ * again tunnel ie outer L4 is optional bcoz of\n+ * Ether / (vlan) / outer IP|IP6 / GRE / Ether / IP|IP6 / UDP|TCP|SCTP\n+ * Ether / (vlan) / outer IP|IP6 / outer UDP / VxLAN / Ether / IP|IP6 /\n+ *           UDP|TCP|SCTP\n+ * Ether / (vlan) / outer IP|IP6 / outer UDP / VXLAN-GPE / Ether / IP|IP6 /\n+ *           UDP|TCP|SCTP\n+ * Ether / (vlan) / outer IP|IP6 / outer UDP / VXLAN-GPE / IP|IP6 /\n+ *           UDP|TCP|SCTP\n+ * Ether / (vlan) / outer IP|IP6 / GRE / IP|IP6 / UDP|TCP|SCTP\n+ * Ether / (vlan) / outer IP|IP6 / IP|IP6 / UDP|TCP|SCTP\n+ * also inner L3 chksum error is not taken into consideration by DPDK.\n+ */\n+#define IS_IP_TUNNEL_PKT(flags2_f)\t\\\n+\t((flags2_f) & rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC))\n \n-#define RX_CMP_L4_CS_UNKNOWN(rxcmp1)\t\t\t\t\t\\\n-\t    !((rxcmp1)->flags2 & RX_CMP_L4_CS_BITS)\n+/* RX_PKT_CMPL_ERRORS_IP_CS_ERROR only for Non-tunnel pkts.\n+ * For tunnel pkts RX_PKT_CMPL_ERRORS_IP_CS_ERROR is not accounted and treated\n+ * as good csum pkt.\n+ */\n+#define RX_CMP_IP_CS_ERROR(rxcmp1)\t\\\n+\t((rxcmp1)->errors_v2 &\t\\\n+\t rte_cpu_to_le_32(RX_PKT_CMPL_ERRORS_IP_CS_ERROR))\n \n-#define RX_CMP_IP_CS_ERR_BITS\t\\\n-\trte_cpu_to_le_32(RX_PKT_CMPL_ERRORS_IP_CS_ERROR | \\\n-\t\t\t RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR)\n+#define RX_CMP_IP_OUTER_CS_ERROR(rxcmp1)\t\\\n+\t((rxcmp1)->errors_v2 &\t\\\n+\t rte_cpu_to_le_32(RX_PKT_CMPL_ERRORS_T_IP_CS_ERROR))\n \n #define RX_CMP_IP_CS_BITS\t\\\n \trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_CS_CALC | \\\n \t\t\t RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC)\n \n-#define RX_CMP_IP_CS_OK(rxcmp1)\t\t\t\t\t\t\\\n-\t\t(((rxcmp1)->flags2 & RX_CMP_IP_CS_BITS) &&\t\\\n-\t\t!((rxcmp1)->errors_v2 & RX_CMP_IP_CS_ERR_BITS))\n-\n-#define RX_CMP_IP_CS_UNKNOWN(rxcmp1)\t\t\t\t\t\\\n+#define RX_CMP_IP_CS_UNKNOWN(rxcmp1)\t\\\n \t\t!((rxcmp1)->flags2 & RX_CMP_IP_CS_BITS)\n \n+/* L4 non tunnel pkt-\n+ * Ether / (vlan) / IP6 / UDP|TCP|SCTP\n+ */\n+#define IS_L4_NONTUNNEL_PKT(flags2_f)\t\\\n+\t( \\\n+\t  ((flags2_f) == \\\n+\t   (rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_CS_CALC |\t\\\n+\t\t\t     RX_PKT_CMPL_FLAGS2_L4_CS_CALC))))\n+\n+/* L4 tunnel pkt-\n+ * Outer L4 is not mandatory. Eg: GRE-\n+ * Ether / (vlan) / outer IP|IP6 / GRE / Ether / IP|IP6 / UDP|TCP|SCTP\n+ * Ether / (vlan) / outer IP|IP6 / outer UDP / VxLAN / Ether / IP|IP6 /\n+ *           UDP|TCP|SCTP\n+ */\n+#define\tIS_L4_TUNNEL_PKT_INNER_OUTER_L4_CS(flags2_f)\t\\\n+\t ((flags2_f) == \\\n+\t  (rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_CS_CALC |\t\\\n+\t\t\t    RX_PKT_CMPL_FLAGS2_L4_CS_CALC |\t\\\n+\t\t\t    RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC |\t\\\n+\t\t\t    RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC)))\n+\n+#define IS_L4_TUNNEL_PKT_ONLY_INNER_L4_CS(flags2_f)\t\\\n+\t ((flags2_f) == \\\n+\t  (rte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_IP_CS_CALC |\t\\\n+\t\t\t    RX_PKT_CMPL_FLAGS2_L4_CS_CALC |\t\\\n+\t\t\t    RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC)))\n+\n+#define IS_L4_TUNNEL_PKT(flags2_f)\t\\\n+\t(\t\\\n+\t\tIS_L4_TUNNEL_PKT_INNER_OUTER_L4_CS(flags2_f) || \\\n+\t\tIS_L4_TUNNEL_PKT_ONLY_INNER_L4_CS(flags2_f)\t\\\n+\t)\n+\n+#define RX_CMP_L4_CS_BITS\t\\\n+\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_L4_CS_CALC)\n+\n+#define RX_CMP_L4_CS_UNKNOWN(rxcmp1)\t\t\t\t\t\\\n+\t    !((rxcmp1)->flags2 & RX_CMP_L4_CS_BITS)\n+\n+#define RX_CMP_T_L4_CS_BITS\t\\\n+\trte_cpu_to_le_32(RX_PKT_CMPL_FLAGS2_T_L4_CS_CALC)\n+\n+#define RX_CMP_T_L4_CS_UNKNOWN(rxcmp1)\t\t\t\t\t\\\n+\t    !((rxcmp1)->flags2 & RX_CMP_T_L4_CS_BITS)\n+\n+/* Outer L4 chksum error\n+ */\n+#define RX_CMP_L4_OUTER_CS_ERR2(rxcmp1)\t\\\n+\t ((rxcmp1)->errors_v2 & \\\n+\t  rte_cpu_to_le_32(RX_PKT_CMPL_ERRORS_T_L4_CS_ERROR))\n+\n+/* Inner L4 chksum error\n+ */\n+#define RX_CMP_L4_INNER_CS_ERR2(rxcmp1)\t\\\n+\t ((rxcmp1)->errors_v2 & \\\n+\t  rte_cpu_to_le_32(RX_PKT_CMPL_ERRORS_L4_CS_ERROR))\n+\n #define BNXT_RX_POST_THRESH\t32\n \n enum pkt_hash_types {\n",
    "prefixes": [
        "v3",
        "06/15"
    ]
}