get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 915566,
    "url": "http://patchwork.ozlabs.org/api/patches/915566/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20180517080840.30192-2-alice.michael@intel.com/",
    "project": {
        "id": 46,
        "url": "http://patchwork.ozlabs.org/api/projects/46/?format=api",
        "name": "Intel Wired Ethernet development",
        "link_name": "intel-wired-lan",
        "list_id": "intel-wired-lan.osuosl.org",
        "list_email": "intel-wired-lan@osuosl.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20180517080840.30192-2-alice.michael@intel.com>",
    "list_archive_url": null,
    "date": "2018-05-17T08:08:33",
    "name": "[next,S92,2/9] i40e: always return VEB stat strings",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "0e097ef52fd6b4e7ca9055033b2babab2b0f4591",
    "submitter": {
        "id": 71123,
        "url": "http://patchwork.ozlabs.org/api/people/71123/?format=api",
        "name": "Michael, Alice",
        "email": "alice.michael@intel.com"
    },
    "delegate": {
        "id": 68,
        "url": "http://patchwork.ozlabs.org/api/users/68/?format=api",
        "username": "jtkirshe",
        "first_name": "Jeff",
        "last_name": "Kirsher",
        "email": "jeffrey.t.kirsher@intel.com"
    },
    "mbox": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20180517080840.30192-2-alice.michael@intel.com/mbox/",
    "series": [
        {
            "id": 45017,
            "url": "http://patchwork.ozlabs.org/api/series/45017/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=45017",
            "date": "2018-05-17T08:08:34",
            "name": "[next,S92,1/9] i40e: free skb after clearing lock in ptp_stop",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/45017/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/915566/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/915566/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@osuosl.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@bilbo.ozlabs.org",
            "intel-wired-lan@lists.osuosl.org"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.138; helo=whitealder.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=intel.com"
        ],
        "Received": [
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 40mxKy1nPcz9s3X\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri, 18 May 2018 02:17:58 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 9B0CC882A8;\n\tThu, 17 May 2018 16:17:56 +0000 (UTC)",
            "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id GOWOPNkjyOkr; Thu, 17 May 2018 16:17:55 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id A790888266;\n\tThu, 17 May 2018 16:17:55 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id DCFC31C2C4E\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 17 May 2018 16:17:50 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id DA0358829F\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 17 May 2018 16:17:50 +0000 (UTC)",
            "from whitealder.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id MnBUwRD2DKRM for <intel-wired-lan@lists.osuosl.org>;\n\tThu, 17 May 2018 16:17:48 +0000 (UTC)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 0D8AF88217\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 17 May 2018 16:17:48 +0000 (UTC)",
            "from orsmga006.jf.intel.com ([10.7.209.51])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t17 May 2018 09:17:47 -0700",
            "from alicemic-2.jf.intel.com ([10.166.16.121])\n\tby orsmga006.jf.intel.com with ESMTP; 17 May 2018 09:17:47 -0700"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "domain auto-whitelisted by SQLgrey-1.7.6",
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.49,411,1520924400\"; d=\"scan'208\";a=\"42632751\"",
        "From": "Alice Michael <alice.michael@intel.com>",
        "To": "alice.michael@intel.com,\n\tintel-wired-lan@lists.osuosl.org",
        "Date": "Thu, 17 May 2018 01:08:33 -0700",
        "Message-Id": "<20180517080840.30192-2-alice.michael@intel.com>",
        "X-Mailer": "git-send-email 2.9.5",
        "In-Reply-To": "<20180517080840.30192-1-alice.michael@intel.com>",
        "References": "<20180517080840.30192-1-alice.michael@intel.com>",
        "Subject": "[Intel-wired-lan] [next PATCH S92 2/9] i40e: always return VEB stat\n\tstrings",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.24",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "From: Jacob Keller <jacob.e.keller@intel.com>\n\nThe ethtool API for obtaining device statistics is not intended to allow\nruntime changes in the number of statistics reported. It may *appear*\nthis way, as there is an ability to request the number of stats using\nethtool_get_set_count(). However, it is expected that this must always\nreturn the same value for invocations of the same device.\n\nIf we don't satisfy this contract, and allow the number of stats to\nchange during run time, we could cause invalid memory accesses or report\nthe stat strings incorrectly. This is because the API for obtaining\nstats is to (1) get the size, (2) get the strings and finally (3) get\nthe stats. Since these are each separate ethtool op commands, it is not\npossible to maintain consistency by holding the RTNL lock over the whole\noperation. This results in the potential for a race condition to occur\nwhere the size changed between any of the 3 calls.\n\nAvoid this issue by requiring that we always return the same value for\na given device. We can check any values which remain constant for the\nlife of the device, but must not report different sizes depending on\nruntime attributes.\n\nThis patch specifically fixes the VEB statistics strings to always be\nreported. Other issues will be fixed in future patches.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 52 ++++++++++++--------------\n 1 file changed, 23 insertions(+), 29 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\nindex 4b78225..5a0e4d4 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n@@ -1541,15 +1541,10 @@ static int i40e_get_stats_count(struct net_device *netdev)\n \tstruct i40e_vsi *vsi = np->vsi;\n \tstruct i40e_pf *pf = vsi->back;\n \n-\tif (vsi == pf->vsi[pf->lan_vsi] && pf->hw.partition_id == 1) {\n-\t\tif (pf->lan_veb != I40E_NO_VEB &&\n-\t\t    pf->flags & I40E_FLAG_VEB_STATS_ENABLED)\n-\t\t\treturn I40E_PF_STATS_LEN(netdev) + I40E_VEB_STATS_TOTAL;\n-\t\telse\n-\t\t\treturn I40E_PF_STATS_LEN(netdev);\n-\t} else {\n+\tif (vsi == pf->vsi[pf->lan_vsi] && pf->hw.partition_id == 1)\n+\t\treturn I40E_PF_STATS_LEN(netdev) + I40E_VEB_STATS_TOTAL;\n+\telse\n \t\treturn I40E_VSI_STATS_LEN(netdev);\n-\t}\n }\n \n static int i40e_get_sset_count(struct net_device *netdev, int sset)\n@@ -1640,6 +1635,8 @@ static void i40e_get_ethtool_stats(struct net_device *netdev,\n \t\t\tdata[i++] = veb->tc_stats.tc_rx_packets[j];\n \t\t\tdata[i++] = veb->tc_stats.tc_rx_bytes[j];\n \t\t}\n+\t} else {\n+\t\ti += I40E_VEB_STATS_TOTAL;\n \t}\n \tfor (j = 0; j < I40E_GLOBAL_STATS_LEN; j++) {\n \t\tp = (char *)pf + i40e_gstrings_stats[j].stat_offset;\n@@ -1696,27 +1693,24 @@ static void i40e_get_strings(struct net_device *netdev, u32 stringset,\n \t\tif (vsi != pf->vsi[pf->lan_vsi] || pf->hw.partition_id != 1)\n \t\t\treturn;\n \n-\t\tif ((pf->lan_veb != I40E_NO_VEB) &&\n-\t\t    (pf->flags & I40E_FLAG_VEB_STATS_ENABLED)) {\n-\t\t\tfor (i = 0; i < I40E_VEB_STATS_LEN; i++) {\n-\t\t\t\tsnprintf(p, ETH_GSTRING_LEN, \"veb.%s\",\n-\t\t\t\t\ti40e_gstrings_veb_stats[i].stat_string);\n-\t\t\t\tp += ETH_GSTRING_LEN;\n-\t\t\t}\n-\t\t\tfor (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {\n-\t\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n-\t\t\t\t\t \"veb.tc_%d_tx_packets\", i);\n-\t\t\t\tp += ETH_GSTRING_LEN;\n-\t\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n-\t\t\t\t\t \"veb.tc_%d_tx_bytes\", i);\n-\t\t\t\tp += ETH_GSTRING_LEN;\n-\t\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n-\t\t\t\t\t \"veb.tc_%d_rx_packets\", i);\n-\t\t\t\tp += ETH_GSTRING_LEN;\n-\t\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n-\t\t\t\t\t \"veb.tc_%d_rx_bytes\", i);\n-\t\t\t\tp += ETH_GSTRING_LEN;\n-\t\t\t}\n+\t\tfor (i = 0; i < I40E_VEB_STATS_LEN; i++) {\n+\t\t\tsnprintf(p, ETH_GSTRING_LEN, \"veb.%s\",\n+\t\t\t\t i40e_gstrings_veb_stats[i].stat_string);\n+\t\t\tp += ETH_GSTRING_LEN;\n+\t\t}\n+\t\tfor (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {\n+\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n+\t\t\t\t \"veb.tc_%u_tx_packets\", i);\n+\t\t\tp += ETH_GSTRING_LEN;\n+\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n+\t\t\t\t \"veb.tc_%u_tx_bytes\", i);\n+\t\t\tp += ETH_GSTRING_LEN;\n+\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n+\t\t\t\t \"veb.tc_%u_rx_packets\", i);\n+\t\t\tp += ETH_GSTRING_LEN;\n+\t\t\tsnprintf(p, ETH_GSTRING_LEN,\n+\t\t\t\t \"veb.tc_%u_rx_bytes\", i);\n+\t\t\tp += ETH_GSTRING_LEN;\n \t\t}\n \t\tfor (i = 0; i < I40E_GLOBAL_STATS_LEN; i++) {\n \t\t\tsnprintf(p, ETH_GSTRING_LEN, \"port.%s\",\n",
    "prefixes": [
        "next",
        "S92",
        "2/9"
    ]
}