get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 758158,
    "url": "http://patchwork.ozlabs.org/api/patches/758158/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170503172904.9788-3-jacob.e.keller@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": "<20170503172904.9788-3-jacob.e.keller@intel.com>",
    "list_archive_url": null,
    "date": "2017-05-03T17:28:51",
    "name": "[v4,02/15] i40e: fix race condition with PTP_TX_IN_PROGRESS bits",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "84165ca919a864413553d27bd99faea873a88dd6",
    "submitter": {
        "id": 9784,
        "url": "http://patchwork.ozlabs.org/api/people/9784/?format=api",
        "name": "Jacob Keller",
        "email": "jacob.e.keller@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/20170503172904.9788-3-jacob.e.keller@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/758158/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/758158/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@lists.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"
        ],
        "Received": [
            "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\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 3wJ4sF3Lqxz9rvt\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  4 May 2017 03:29:21 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id D91CC89AD1;\n\tWed,  3 May 2017 17:29:19 +0000 (UTC)",
            "from hemlock.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id iF2pDzX5K8Ys; Wed,  3 May 2017 17:29:17 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 6679A89AE1;\n\tWed,  3 May 2017 17:29:17 +0000 (UTC)",
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ash.osuosl.org (Postfix) with ESMTP id A0BE91C2B0D\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:14 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 9B65330183\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:14 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id u8LXgDrOi0MN for <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:12 +0000 (UTC)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby silver.osuosl.org (Postfix) with ESMTPS id 9E2662FD97\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:12 +0000 (UTC)",
            "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t03 May 2017 10:29:11 -0700",
            "from jekeller-desk.amr.corp.intel.com (HELO\n\tjekeller-desk.jekeller.internal) ([10.166.35.158])\n\tby orsmga002.jf.intel.com with ESMTP; 03 May 2017 10:29:11 -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-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.38,284,1491289200\"; d=\"scan'208\";a=\"82071001\"",
        "From": "Jacob Keller <jacob.e.keller@intel.com>",
        "To": "Intel Wired LAN <intel-wired-lan@lists.osuosl.org>",
        "Date": "Wed,  3 May 2017 10:28:51 -0700",
        "Message-Id": "<20170503172904.9788-3-jacob.e.keller@intel.com>",
        "X-Mailer": "git-send-email 2.13.0.rc0.317.gcc792a6cad5a",
        "In-Reply-To": "<20170503172904.9788-1-jacob.e.keller@intel.com>",
        "References": "<20170503172904.9788-1-jacob.e.keller@intel.com>",
        "Cc": "Richard Cochran <richardcochran@gmail.com>",
        "Subject": "[Intel-wired-lan] [PATCH v4 02/15] i40e: fix race condition with\n\tPTP_TX_IN_PROGRESS bits",
        "X-BeenThere": "intel-wired-lan@lists.osuosl.org",
        "X-Mailman-Version": "2.1.18-1",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.lists.osuosl.org>",
        "List-Unsubscribe": "<http://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@lists.osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@lists.osuosl.org?subject=help>",
        "List-Subscribe": "<http://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.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@lists.osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@lists.osuosl.org>"
    },
    "content": "Hardware related to the i40e driver has a limitation on Tx PTP packets.\nThis requires us to limit the driver to timestamping a single packet at\nonce. This is done using a state bitlock which enforces that only one\ntimestamp request is honored at a time.\n\nUnfortunately this suffers from a race condition. The bit lock is not\ncleared until after skb_tstamp_tx() is called notifying applications of\na new Tx timestamp. Even a well behaved application sending only one\npacket at a time and waiting for a response can wake up and send a new\ntimestamped packet request before the bit lock is cleared. This results\nin needlessly dropping some Tx timestamp requests.\n\nWe can fix this by unlocking the state bit as soon as we read the\nTimestamp register, as this is the first point at which it is safe to\ntimestamp another packet.\n\nTo avoid issues with the skb pointer, we'll use a copy of the pointer\nand set the global variable in the driver structure to NULL first. This\nensures that the next timestamp request does not modify our local copy\nof the skb pointer.\n\nNow, a well behaved application which has at most one outstanding\ntimestamp request will not accidentally race with the driver unlock bit.\nObviously an application attempting to timestamp faster than one request\nat a time will have some timestamp requests skipped. Unfortunately there\nis nothing we can do about that.\n\nReported-by: David Mirabito <davidm@metamako.com>\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/i40e/i40e_ptp.c | 14 +++++++++++---\n 1 file changed, 11 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_ptp.c b/drivers/net/ethernet/intel/i40e/i40e_ptp.c\nindex 18c1cc08da97..5a4854e9fd29 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_ptp.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_ptp.c\n@@ -338,6 +338,7 @@ void i40e_ptp_rx_hang(struct i40e_vsi *vsi)\n void i40e_ptp_tx_hwtstamp(struct i40e_pf *pf)\n {\n \tstruct skb_shared_hwtstamps shhwtstamps;\n+\tstruct sk_buff *skb = pf->ptp_tx_skb;\n \tstruct i40e_hw *hw = &pf->hw;\n \tu32 hi, lo;\n \tu64 ns;\n@@ -353,12 +354,19 @@ void i40e_ptp_tx_hwtstamp(struct i40e_pf *pf)\n \thi = rd32(hw, I40E_PRTTSYN_TXTIME_H);\n \n \tns = (((u64)hi) << 32) | lo;\n-\n \ti40e_ptp_convert_to_hwtstamp(&shhwtstamps, ns);\n-\tskb_tstamp_tx(pf->ptp_tx_skb, &shhwtstamps);\n-\tdev_kfree_skb_any(pf->ptp_tx_skb);\n+\n+\t/* Clear the bit lock as soon as possible after reading the register,\n+\t * and prior to notifying the stack via skb_tstamp_tx(). Otherwise\n+\t * applications might wake up and attempt to request another transmit\n+\t * timestamp prior to the bit lock being cleared.\n+\t */\n \tpf->ptp_tx_skb = NULL;\n \tclear_bit_unlock(__I40E_PTP_TX_IN_PROGRESS, pf->state);\n+\n+\t/* Notify the stack and free the skb after we've unlocked */\n+\tskb_tstamp_tx(skb, &shhwtstamps);\n+\tdev_kfree_skb_any(skb);\n }\n \n /**\n",
    "prefixes": [
        "v4",
        "02/15"
    ]
}