get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 811597,
    "url": "http://patchwork.ozlabs.org/api/patches/811597/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/7be381dfe3993c37fdaeff34902f72b8334f68a9.1504636892.git.joseph.salisbury@canonical.com/",
    "project": {
        "id": 15,
        "url": "http://patchwork.ozlabs.org/api/projects/15/?format=api",
        "name": "Ubuntu Kernel",
        "link_name": "ubuntu-kernel",
        "list_id": "kernel-team.lists.ubuntu.com",
        "list_email": "kernel-team@lists.ubuntu.com",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<7be381dfe3993c37fdaeff34902f72b8334f68a9.1504636892.git.joseph.salisbury@canonical.com>",
    "list_archive_url": null,
    "date": "2017-09-08T13:38:41",
    "name": "[SRU,Zesty,1/2] PCI: Lock each enable/disable num_vfs operation in sysfs",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "a5430263186029abfd1d6b131eec48e08e6a3597",
    "submitter": {
        "id": 7793,
        "url": "http://patchwork.ozlabs.org/api/people/7793/?format=api",
        "name": "Joseph Salisbury",
        "email": "joseph.salisbury@canonical.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/ubuntu-kernel/patch/7be381dfe3993c37fdaeff34902f72b8334f68a9.1504636892.git.joseph.salisbury@canonical.com/mbox/",
    "series": [
        {
            "id": 2215,
            "url": "http://patchwork.ozlabs.org/api/series/2215/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/ubuntu-kernel/list/?series=2215",
            "date": "2017-09-08T13:38:42",
            "name": "Fixes for LP:1715073",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/2215/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/811597/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/811597/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<kernel-team-bounces@lists.ubuntu.com>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@bilbo.ozlabs.org",
        "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com\n\t(client-ip=91.189.94.19; helo=huckleberry.canonical.com;\n\tenvelope-from=kernel-team-bounces@lists.ubuntu.com;\n\treceiver=<UNKNOWN>)",
        "Received": [
            "from huckleberry.canonical.com (huckleberry.canonical.com\n\t[91.189.94.19])\n\tby ozlabs.org (Postfix) with ESMTP id 3xpdhB101yz9sPk;\n\tFri,  8 Sep 2017 23:38:50 +1000 (AEST)",
            "from localhost ([127.0.0.1] helo=huckleberry.canonical.com)\n\tby huckleberry.canonical.com with esmtp (Exim 4.86_2)\n\t(envelope-from <kernel-team-bounces@lists.ubuntu.com>)\n\tid 1dqJUc-0006Xy-U5; Fri, 08 Sep 2017 13:38:46 +0000",
            "from youngberry.canonical.com ([91.189.89.112])\n\tby huckleberry.canonical.com with esmtps\n\t(TLS1.0:DHE_RSA_AES_128_CBC_SHA1:128)\n\t(Exim 4.86_2) (envelope-from <joseph.salisbury@canonical.com>)\n\tid 1dqJUZ-0006W9-Fo\n\tfor kernel-team@lists.ubuntu.com; Fri, 08 Sep 2017 13:38:43 +0000",
            "from 1.general.jsalisbury.us.vpn ([10.172.67.212] helo=salisbury)\n\tby youngberry.canonical.com with esmtpsa\n\t(TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.76) (envelope-from <joseph.salisbury@canonical.com>)\n\tid 1dqJUZ-00054a-3J\n\tfor kernel-team@lists.ubuntu.com; Fri, 08 Sep 2017 13:38:43 +0000",
            "by salisbury (Postfix, from userid 1000)\n\tid 1F3DB7E00CF; Fri,  8 Sep 2017 09:38:42 -0400 (EDT)"
        ],
        "From": "Joseph Salisbury <joseph.salisbury@canonical.com>",
        "To": "kernel-team@lists.ubuntu.com",
        "Subject": "[SRU][Zesty][PATCH 1/2] PCI: Lock each enable/disable num_vfs\n\toperation in sysfs",
        "Date": "Fri,  8 Sep 2017 09:38:41 -0400",
        "Message-Id": "<7be381dfe3993c37fdaeff34902f72b8334f68a9.1504636892.git.joseph.salisbury@canonical.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": [
            "<cover.1504636892.git.joseph.salisbury@canonical.com>",
            "<cover.1504636892.git.joseph.salisbury@canonical.com>"
        ],
        "References": [
            "<cover.1504636892.git.joseph.salisbury@canonical.com>",
            "<cover.1504636892.git.joseph.salisbury@canonical.com>"
        ],
        "X-BeenThere": "kernel-team@lists.ubuntu.com",
        "X-Mailman-Version": "2.1.20",
        "Precedence": "list",
        "List-Id": "Kernel team discussions <kernel-team.lists.ubuntu.com>",
        "List-Unsubscribe": "<https://lists.ubuntu.com/mailman/options/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=unsubscribe>",
        "List-Archive": "<https://lists.ubuntu.com/archives/kernel-team>",
        "List-Post": "<mailto:kernel-team@lists.ubuntu.com>",
        "List-Help": "<mailto:kernel-team-request@lists.ubuntu.com?subject=help>",
        "List-Subscribe": "<https://lists.ubuntu.com/mailman/listinfo/kernel-team>,\n\t<mailto:kernel-team-request@lists.ubuntu.com?subject=subscribe>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"utf-8\"",
        "Content-Transfer-Encoding": "base64",
        "Errors-To": "kernel-team-bounces@lists.ubuntu.com",
        "Sender": "\"kernel-team\" <kernel-team-bounces@lists.ubuntu.com>"
    },
    "content": "From: Emil Tantilov <emil.s.tantilov@intel.com>\n\nBugLink: http://bugs.launchpad.net/bugs/1715073\n\nEnabling/disabling SRIOV via sysfs by echo-ing multiple values\nsimultaneously:\n\n  # echo 63 > /sys/class/net/ethX/device/sriov_numvfs&\n  # echo 63 > /sys/class/net/ethX/device/sriov_numvfs\n\n  # sleep 5\n\n  # echo 0 > /sys/class/net/ethX/device/sriov_numvfs&\n  # echo 0 > /sys/class/net/ethX/device/sriov_numvfs\n\nresults in the following bug:\n\n  kernel BUG at drivers/pci/iov.c:495!\n  invalid opcode: 0000 [#1] SMP\n  CPU: 1 PID: 8050 Comm: bash Tainted: G   W   4.9.0-rc7-net-next #2092\n  RIP: 0010:[<ffffffff813b1647>]\n\t    [<ffffffff813b1647>] pci_iov_release+0x57/0x60\n\n  Call Trace:\n   [<ffffffff81391726>] pci_release_dev+0x26/0x70\n   [<ffffffff8155be6e>] device_release+0x3e/0xb0\n   [<ffffffff81365ee7>] kobject_cleanup+0x67/0x180\n   [<ffffffff81365d9d>] kobject_put+0x2d/0x60\n   [<ffffffff8155bc27>] put_device+0x17/0x20\n   [<ffffffff8139c08a>] pci_dev_put+0x1a/0x20\n   [<ffffffff8139cb6b>] pci_get_dev_by_id+0x5b/0x90\n   [<ffffffff8139cca5>] pci_get_subsys+0x35/0x40\n   [<ffffffff8139ccc8>] pci_get_device+0x18/0x20\n   [<ffffffff8139ccfb>] pci_get_domain_bus_and_slot+0x2b/0x60\n   [<ffffffff813b09e7>] pci_iov_remove_virtfn+0x57/0x180\n   [<ffffffff813b0b95>] pci_disable_sriov+0x65/0x140\n   [<ffffffffa00a1af7>] ixgbe_disable_sriov+0xc7/0x1d0 [ixgbe]\n   [<ffffffffa00a1e9d>] ixgbe_pci_sriov_configure+0x3d/0x170 [ixgbe]\n   [<ffffffff8139d28c>] sriov_numvfs_store+0xdc/0x130\n  ...\n  RIP  [<ffffffff813b1647>] pci_iov_release+0x57/0x60\n\nUse the existing mutex lock to protect each enable/disable operation.\n\nSigned-off-by: Emil Tantilov <emil.s.tantilov@intel.com>\nSigned-off-by: Bjorn Helgaas <bhelgaas@google.com>\nReviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>\nCC: Alexander Duyck <alexander.h.duyck@intel.com>\n(cherry picked from commit 5b0948dfe138f0837699f46f5877f4f81c252dac)\nSigned-off-by: Joseph Salisbury <joseph.salisbury@canonical.com>\n---\n drivers/pci/iov.c       |  7 -------\n drivers/pci/pci-sysfs.c | 23 ++++++++++++++++-------\n drivers/pci/pci.h       |  2 +-\n 3 files changed, 17 insertions(+), 15 deletions(-)",
    "diff": "diff --git a/drivers/pci/iov.c b/drivers/pci/iov.c\nindex 4722782..2479ae8 100644\n--- a/drivers/pci/iov.c\n+++ b/drivers/pci/iov.c\n@@ -124,7 +124,6 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)\n \tstruct pci_sriov *iov = dev->sriov;\n \tstruct pci_bus *bus;\n \n-\tmutex_lock(&iov->dev->sriov->lock);\n \tbus = virtfn_add_bus(dev->bus, pci_iov_virtfn_bus(dev, id));\n \tif (!bus)\n \t\tgoto failed;\n@@ -162,7 +161,6 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)\n \t\t__pci_reset_function(virtfn);\n \n \tpci_device_add(virtfn, virtfn->bus);\n-\tmutex_unlock(&iov->dev->sriov->lock);\n \n \tpci_bus_add_device(virtfn);\n \tsprintf(buf, \"virtfn%u\", id);\n@@ -181,12 +179,10 @@ int pci_iov_add_virtfn(struct pci_dev *dev, int id, int reset)\n \tsysfs_remove_link(&dev->dev.kobj, buf);\n failed1:\n \tpci_dev_put(dev);\n-\tmutex_lock(&iov->dev->sriov->lock);\n \tpci_stop_and_remove_bus_device(virtfn);\n failed0:\n \tvirtfn_remove_bus(dev->bus, bus);\n failed:\n-\tmutex_unlock(&iov->dev->sriov->lock);\n \n \treturn rc;\n }\n@@ -195,7 +191,6 @@ void pci_iov_remove_virtfn(struct pci_dev *dev, int id, int reset)\n {\n \tchar buf[VIRTFN_ID_LEN];\n \tstruct pci_dev *virtfn;\n-\tstruct pci_sriov *iov = dev->sriov;\n \n \tvirtfn = pci_get_domain_bus_and_slot(pci_domain_nr(dev->bus),\n \t\t\t\t\t     pci_iov_virtfn_bus(dev, id),\n@@ -218,10 +213,8 @@ void pci_iov_remove_virtfn(struct pci_dev *dev, int id, int reset)\n \tif (virtfn->dev.kobj.sd)\n \t\tsysfs_remove_link(&virtfn->dev.kobj, \"physfn\");\n \n-\tmutex_lock(&iov->dev->sriov->lock);\n \tpci_stop_and_remove_bus_device(virtfn);\n \tvirtfn_remove_bus(dev->bus, virtfn->bus);\n-\tmutex_unlock(&iov->dev->sriov->lock);\n \n \t/* balance pci_get_domain_bus_and_slot() */\n \tpci_dev_put(virtfn);\ndiff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c\nindex 9867e0c..c18ca5d 100644\n--- a/drivers/pci/pci-sysfs.c\n+++ b/drivers/pci/pci-sysfs.c\n@@ -473,6 +473,7 @@ static ssize_t sriov_numvfs_store(struct device *dev,\n \t\t\t\t  const char *buf, size_t count)\n {\n \tstruct pci_dev *pdev = to_pci_dev(dev);\n+\tstruct pci_sriov *iov = pdev->sriov;\n \tint ret;\n \tu16 num_vfs;\n \n@@ -483,38 +484,46 @@ static ssize_t sriov_numvfs_store(struct device *dev,\n \tif (num_vfs > pci_sriov_get_totalvfs(pdev))\n \t\treturn -ERANGE;\n \n+\tmutex_lock(&iov->dev->sriov->lock);\n+\n \tif (num_vfs == pdev->sriov->num_VFs)\n-\t\treturn count;\t\t/* no change */\n+\t\tgoto exit;\n \n \t/* is PF driver loaded w/callback */\n \tif (!pdev->driver || !pdev->driver->sriov_configure) {\n \t\tdev_info(&pdev->dev, \"Driver doesn't support SRIOV configuration via sysfs\\n\");\n-\t\treturn -ENOSYS;\n+\t\tret = -ENOENT;\n+\t\tgoto exit;\n \t}\n \n \tif (num_vfs == 0) {\n \t\t/* disable VFs */\n \t\tret = pdev->driver->sriov_configure(pdev, 0);\n-\t\tif (ret < 0)\n-\t\t\treturn ret;\n-\t\treturn count;\n+\t\tgoto exit;\n \t}\n \n \t/* enable VFs */\n \tif (pdev->sriov->num_VFs) {\n \t\tdev_warn(&pdev->dev, \"%d VFs already enabled. Disable before enabling %d VFs\\n\",\n \t\t\t pdev->sriov->num_VFs, num_vfs);\n-\t\treturn -EBUSY;\n+\t\tret = -EBUSY;\n+\t\tgoto exit;\n \t}\n \n \tret = pdev->driver->sriov_configure(pdev, num_vfs);\n \tif (ret < 0)\n-\t\treturn ret;\n+\t\tgoto exit;\n \n \tif (ret != num_vfs)\n \t\tdev_warn(&pdev->dev, \"%d VFs requested; only %d enabled\\n\",\n \t\t\t num_vfs, ret);\n \n+exit:\n+\tmutex_unlock(&iov->dev->sriov->lock);\n+\n+\tif (ret < 0)\n+\t\treturn ret;\n+\n \treturn count;\n }\n \ndiff --git a/drivers/pci/pci.h b/drivers/pci/pci.h\nindex cb17db2..8dd38e6 100644\n--- a/drivers/pci/pci.h\n+++ b/drivers/pci/pci.h\n@@ -270,7 +270,7 @@ struct pci_sriov {\n \tu16 driver_max_VFs;\t/* max num VFs driver supports */\n \tstruct pci_dev *dev;\t/* lowest numbered PF */\n \tstruct pci_dev *self;\t/* this PF */\n-\tstruct mutex lock;\t/* lock for VF bus */\n+\tstruct mutex lock;\t/* lock for setting sriov_numvfs in sysfs */\n \tresource_size_t barsz[PCI_SRIOV_NUM_BARS];\t/* VF BAR size */\n };\n \n",
    "prefixes": [
        "SRU",
        "Zesty",
        "1/2"
    ]
}