get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 758167,
    "url": "http://patchwork.ozlabs.org/api/patches/758167/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170503172904.9788-5-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-5-jacob.e.keller@intel.com>",
    "list_archive_url": null,
    "date": "2017-05-03T17:28:53",
    "name": "[v4,04/15] ixgbe: fix race condition with PTP_TX_IN_PROGRESS bits",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "901ef51adea4b42c7f8677b103e41c7ae616b7be",
    "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-5-jacob.e.keller@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/758167/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/758167/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 3wJ4sN5ml0z9rxw\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  4 May 2017 03:29:28 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 4411B89A90;\n\tWed,  3 May 2017 17:29:27 +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 z2gH1SUw642v; Wed,  3 May 2017 17:29:24 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 3553F89AEE;\n\tWed,  3 May 2017 17:29:22 +0000 (UTC)",
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ash.osuosl.org (Postfix) with ESMTP id CE67B1C2B0D\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:15 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id C429324312\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:15 +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 BCFlRGvYNA0A for <intel-wired-lan@lists.osuosl.org>;\n\tWed,  3 May 2017 17:29:13 +0000 (UTC)",
            "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby silver.osuosl.org (Postfix) with ESMTPS id EDC3730158\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=\"82071008\"",
        "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:53 -0700",
        "Message-Id": "<20170503172904.9788-5-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 04/15] ixgbe: 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 ixgbe driver is limited to handling a single Tx\ntimestamp request at a time. Thus, the driver ignores requests for Tx\ntimestamp while waiting for the current request to finish. It usess\na state bit lock which enforces that only one timestamp request is\nhonored at a time.\n\nUnfortunately this suffers from a simple race condition. The bit lock is\nnot cleared until after skb_tstamp_tx() is called notifying applications\nof a 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\npacket before the bit lock is cleared. This results in needlessly\ndropping 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\nunlock.\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\nThis ensures that well behaved applications do not accidentally race\nwith the unlock bit. Obviously an application which sends multiple Tx\ntimestamp requests at once will still only timestamp one packet at\na time. Unfortunately there is nothing we can do about this.\n\nReported-by: David Mirabito <davidm@metamako.com>\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 15 ++++++++++++---\n 1 file changed, 12 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c\nindex ef0635e0918c..9270e6f4fcff 100644\n--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c\n+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c\n@@ -672,17 +672,26 @@ static void ixgbe_ptp_clear_tx_timestamp(struct ixgbe_adapter *adapter)\n  */\n static void ixgbe_ptp_tx_hwtstamp(struct ixgbe_adapter *adapter)\n {\n+\tstruct sk_buff *skb = adapter->ptp_tx_skb;\n \tstruct ixgbe_hw *hw = &adapter->hw;\n \tstruct skb_shared_hwtstamps shhwtstamps;\n \tu64 regval = 0;\n \n \tregval |= (u64)IXGBE_READ_REG(hw, IXGBE_TXSTMPL);\n \tregval |= (u64)IXGBE_READ_REG(hw, IXGBE_TXSTMPH) << 32;\n-\n \tixgbe_ptp_convert_to_hwtstamp(adapter, &shhwtstamps, regval);\n-\tskb_tstamp_tx(adapter->ptp_tx_skb, &shhwtstamps);\n \n-\tixgbe_ptp_clear_tx_timestamp(adapter);\n+\t/* Handle cleanup of the ptp_tx_skb ourselves, and unlock the state\n+\t * bit prior to notifying the stack via skb_tstamp_tx(). This prevents\n+\t * well behaved applications from attempting to timestamp again prior\n+\t * to the lock bit being clear.\n+\t */\n+\tadapter->ptp_tx_skb = NULL;\n+\tclear_bit_unlock(__IXGBE_PTP_TX_IN_PROGRESS, &adapter->state);\n+\n+\t/* Notify the stack and then 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",
        "04/15"
    ]
}