get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 819404,
    "url": "http://patchwork.ozlabs.org/api/patches/819404/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170928044132.30940-10-saeedm@mellanox.com/",
    "project": {
        "id": 7,
        "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api",
        "name": "Linux network development",
        "link_name": "netdev",
        "list_id": "netdev.vger.kernel.org",
        "list_email": "netdev@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20170928044132.30940-10-saeedm@mellanox.com>",
    "list_archive_url": null,
    "date": "2017-09-28T04:41:30",
    "name": "[net,09/11] net/mlx5e: Fix calculated checksum offloads counters",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "f821a34e62fe6766e122f1d33dbcd188b9983fa0",
    "submitter": {
        "id": 65299,
        "url": "http://patchwork.ozlabs.org/api/people/65299/?format=api",
        "name": "Saeed Mahameed",
        "email": "saeedm@mellanox.com"
    },
    "delegate": {
        "id": 34,
        "url": "http://patchwork.ozlabs.org/api/users/34/?format=api",
        "username": "davem",
        "first_name": "David",
        "last_name": "Miller",
        "email": "davem@davemloft.net"
    },
    "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170928044132.30940-10-saeedm@mellanox.com/mbox/",
    "series": [
        {
            "id": 5488,
            "url": "http://patchwork.ozlabs.org/api/series/5488/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=5488",
            "date": "2017-09-28T04:41:23",
            "name": "Mellanox, mlx5 fixes 2017-09-28",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/5488/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/819404/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/819404/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<netdev-owner@vger.kernel.org>",
        "X-Original-To": "patchwork-incoming@ozlabs.org",
        "Delivered-To": "patchwork-incoming@ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3y2hr13kvBz9t3x\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 28 Sep 2017 14:42:25 +1000 (AEST)",
            "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752022AbdI1EmW (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 28 Sep 2017 00:42:22 -0400",
            "from mail-il-dmz.mellanox.com ([193.47.165.129]:54410 \"EHLO\n\tmellanox.co.il\" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org\n\twith ESMTP id S1751730AbdI1EmG (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 28 Sep 2017 00:42:06 -0400",
            "from Internal Mail-Server by MTLPINE1 (envelope-from\n\tsaeedm@mellanox.com)\n\twith ESMTPS (AES256-SHA encrypted); 28 Sep 2017 06:42:02 +0200",
            "from sws.mtl.labs.mlnx (reg-l-vrt-045-015.mtl.labs.mlnx\n\t[10.135.45.15])\n\tby labmailer.mlnx (8.13.8/8.13.8) with ESMTP id v8S4g1jD011096;\n\tThu, 28 Sep 2017 07:42:01 +0300"
        ],
        "From": "Saeed Mahameed <saeedm@mellanox.com>",
        "To": "\"David S. Miller\" <davem@davemloft.net>",
        "Cc": "netdev@vger.kernel.org, Gal Pressman <galp@mellanox.com>,\n\tSaeed Mahameed <saeedm@mellanox.com>",
        "Subject": "[net 09/11] net/mlx5e: Fix calculated checksum offloads counters",
        "Date": "Thu, 28 Sep 2017 07:41:30 +0300",
        "Message-Id": "<20170928044132.30940-10-saeedm@mellanox.com>",
        "X-Mailer": "git-send-email 2.13.0",
        "In-Reply-To": "<20170928044132.30940-1-saeedm@mellanox.com>",
        "References": "<20170928044132.30940-1-saeedm@mellanox.com>",
        "Sender": "netdev-owner@vger.kernel.org",
        "Precedence": "bulk",
        "List-ID": "<netdev.vger.kernel.org>",
        "X-Mailing-List": "netdev@vger.kernel.org"
    },
    "content": "From: Gal Pressman <galp@mellanox.com>\n\nInstead of calculating the offloads counters, count them explicitly.\nThe calculations done for these counters would result in bugs in some\ncases, for example:\nWhen running TCP traffic over a VXLAN tunnel with TSO enabled the following\ncounters would increase:\n       tx_csum_partial: 1,333,284\n       tx_csum_partial_inner: 29,286\n       tx4_csum_partial_inner: 384\n       tx7_csum_partial_inner: 8\n       tx9_csum_partial_inner: 34\n       tx10_csum_partial_inner: 26,807\n       tx11_csum_partial_inner: 287\n       tx12_csum_partial_inner: 27\n       tx16_csum_partial_inner: 6\n       tx25_csum_partial_inner: 1,733\n\nSeems like tx_csum_partial increased out of nowhere.\nThe issue is in the following calculation in mlx5e_update_sw_counters:\ns->tx_csum_partial = s->tx_packets - tx_offload_none - s->tx_csum_partial_inner;\n\nWhile tx_packets increases by the number of GSO segments for each SKB,\ntx_csum_partial_inner will only increase by one, resulting in wrong\ntx_csum_partial counter.\n\nFixes: bfe6d8d1d433 (\"net/mlx5e: Reorganize ethtool statistics\")\nSigned-off-by: Gal Pressman <galp@mellanox.com>\nSigned-off-by: Saeed Mahameed <saeedm@mellanox.com>\n---\n drivers/net/ethernet/mellanox/mlx5/core/en_main.c  | 9 +++------\n drivers/net/ethernet/mellanox/mlx5/core/en_rx.c    | 3 +++\n drivers/net/ethernet/mellanox/mlx5/core/en_stats.h | 6 ++++++\n drivers/net/ethernet/mellanox/mlx5/core/en_tx.c    | 1 +\n 4 files changed, 13 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c\nindex 84b013dc62e9..cc11bbbd0309 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c\n@@ -184,7 +184,6 @@ static void mlx5e_update_sw_counters(struct mlx5e_priv *priv)\n \tstruct mlx5e_sw_stats temp, *s = &temp;\n \tstruct mlx5e_rq_stats *rq_stats;\n \tstruct mlx5e_sq_stats *sq_stats;\n-\tu64 tx_offload_none = 0;\n \tint i, j;\n \n \tmemset(s, 0, sizeof(*s));\n@@ -199,6 +198,7 @@ static void mlx5e_update_sw_counters(struct mlx5e_priv *priv)\n \t\ts->rx_lro_bytes\t+= rq_stats->lro_bytes;\n \t\ts->rx_csum_none\t+= rq_stats->csum_none;\n \t\ts->rx_csum_complete += rq_stats->csum_complete;\n+\t\ts->rx_csum_unnecessary += rq_stats->csum_unnecessary;\n \t\ts->rx_csum_unnecessary_inner += rq_stats->csum_unnecessary_inner;\n \t\ts->rx_xdp_drop += rq_stats->xdp_drop;\n \t\ts->rx_xdp_tx += rq_stats->xdp_tx;\n@@ -229,14 +229,11 @@ static void mlx5e_update_sw_counters(struct mlx5e_priv *priv)\n \t\t\ts->tx_queue_dropped\t+= sq_stats->dropped;\n \t\t\ts->tx_xmit_more\t\t+= sq_stats->xmit_more;\n \t\t\ts->tx_csum_partial_inner += sq_stats->csum_partial_inner;\n-\t\t\ttx_offload_none\t\t+= sq_stats->csum_none;\n+\t\t\ts->tx_csum_none\t\t+= sq_stats->csum_none;\n+\t\t\ts->tx_csum_partial\t+= sq_stats->csum_partial;\n \t\t}\n \t}\n \n-\t/* Update calculated offload counters */\n-\ts->tx_csum_partial = s->tx_packets - tx_offload_none - s->tx_csum_partial_inner;\n-\ts->rx_csum_unnecessary = s->rx_packets - s->rx_csum_none - s->rx_csum_complete;\n-\n \ts->link_down_events_phy = MLX5_GET(ppcnt_reg,\n \t\t\t\tpriv->stats.pport.phy_counters,\n \t\t\t\tcounter_set.phys_layer_cntrs.link_down_events);\ndiff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c\nindex f1dd638384d3..15a1687483cc 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_rx.c\n@@ -627,6 +627,7 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,\n \n \tif (lro) {\n \t\tskb->ip_summed = CHECKSUM_UNNECESSARY;\n+\t\trq->stats.csum_unnecessary++;\n \t\treturn;\n \t}\n \n@@ -644,7 +645,9 @@ static inline void mlx5e_handle_csum(struct net_device *netdev,\n \t\t\tskb->csum_level = 1;\n \t\t\tskb->encapsulation = 1;\n \t\t\trq->stats.csum_unnecessary_inner++;\n+\t\t\treturn;\n \t\t}\n+\t\trq->stats.csum_unnecessary++;\n \t\treturn;\n \t}\n csum_none:\ndiff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h\nindex 6d199ffb1c0b..f8637213afc0 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_stats.h\n@@ -68,6 +68,7 @@ struct mlx5e_sw_stats {\n \tu64 rx_xdp_drop;\n \tu64 rx_xdp_tx;\n \tu64 rx_xdp_tx_full;\n+\tu64 tx_csum_none;\n \tu64 tx_csum_partial;\n \tu64 tx_csum_partial_inner;\n \tu64 tx_queue_stopped;\n@@ -108,6 +109,7 @@ static const struct counter_desc sw_stats_desc[] = {\n \t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_drop) },\n \t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_tx) },\n \t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, rx_xdp_tx_full) },\n+\t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_none) },\n \t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_partial) },\n \t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_csum_partial_inner) },\n \t{ MLX5E_DECLARE_STAT(struct mlx5e_sw_stats, tx_queue_stopped) },\n@@ -339,6 +341,7 @@ struct mlx5e_rq_stats {\n \tu64 packets;\n \tu64 bytes;\n \tu64 csum_complete;\n+\tu64 csum_unnecessary;\n \tu64 csum_unnecessary_inner;\n \tu64 csum_none;\n \tu64 lro_packets;\n@@ -363,6 +366,7 @@ static const struct counter_desc rq_stats_desc[] = {\n \t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, packets) },\n \t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, bytes) },\n \t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_complete) },\n+\t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary) },\n \t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_unnecessary_inner) },\n \t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, csum_none) },\n \t{ MLX5E_DECLARE_RX_STAT(struct mlx5e_rq_stats, xdp_drop) },\n@@ -392,6 +396,7 @@ struct mlx5e_sq_stats {\n \tu64 tso_bytes;\n \tu64 tso_inner_packets;\n \tu64 tso_inner_bytes;\n+\tu64 csum_partial;\n \tu64 csum_partial_inner;\n \tu64 nop;\n \t/* less likely accessed in data path */\n@@ -408,6 +413,7 @@ static const struct counter_desc sq_stats_desc[] = {\n \t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_bytes) },\n \t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_inner_packets) },\n \t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, tso_inner_bytes) },\n+\t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_partial) },\n \t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_partial_inner) },\n \t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, nop) },\n \t{ MLX5E_DECLARE_TX_STAT(struct mlx5e_sq_stats, csum_none) },\ndiff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c\nindex fee43e40fa16..1d6925d4369a 100644\n--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c\n+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tx.c\n@@ -193,6 +193,7 @@ mlx5e_txwqe_build_eseg_csum(struct mlx5e_txqsq *sq, struct sk_buff *skb, struct\n \t\t\tsq->stats.csum_partial_inner++;\n \t\t} else {\n \t\t\teseg->cs_flags |= MLX5_ETH_WQE_L4_CSUM;\n+\t\t\tsq->stats.csum_partial++;\n \t\t}\n \t} else\n \t\tsq->stats.csum_none++;\n",
    "prefixes": [
        "net",
        "09/11"
    ]
}