get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 984344,
    "url": "http://patchwork.ozlabs.org/api/patches/984344/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20181015191829.17115-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": "<20181015191829.17115-3-jacob.e.keller@intel.com>",
    "list_archive_url": null,
    "date": "2018-10-15T19:18:28",
    "name": "[net-next,2/3] fm10k: ensure completer aborts are marked as non-fatal after a resume",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "816be496b65684f38300de4be97a400b6d66794e",
    "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/20181015191829.17115-3-jacob.e.keller@intel.com/mbox/",
    "series": [
        {
            "id": 70890,
            "url": "http://patchwork.ozlabs.org/api/series/70890/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=70890",
            "date": "2018-10-15T19:18:27",
            "name": "fm10k: driver updates",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/70890/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/984344/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/984344/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.133; helo=hemlock.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 hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 42YpBn4VxCz9s1x\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 16 Oct 2018 06:18:41 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 180A387B8B;\n\tMon, 15 Oct 2018 19:18:40 +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 22zjWJRA-VP3; Mon, 15 Oct 2018 19:18:37 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 5C82087B39;\n\tMon, 15 Oct 2018 19:18:37 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 674251BFAB2\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 15 Oct 2018 19:18:35 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 64D608690F\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 15 Oct 2018 19:18:35 +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 aBQMQsL1EKNJ for <intel-wired-lan@lists.osuosl.org>;\n\tMon, 15 Oct 2018 19:18:33 +0000 (UTC)",
            "from mga07.intel.com (mga07.intel.com [134.134.136.100])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 553B987058\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 15 Oct 2018 19:18:33 +0000 (UTC)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n\tby orsmga105.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t15 Oct 2018 12:18:32 -0700",
            "from jekeller-desk.amr.corp.intel.com (HELO\n\tjekeller-desk.jekeller.internal) ([10.166.244.182])\n\tby fmsmga004.fm.intel.com with ESMTP; 15 Oct 2018 12:18:32 -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.54,385,1534834800\"; d=\"scan'208\";a=\"97665791\"",
        "From": "Jacob Keller <jacob.e.keller@intel.com>",
        "To": "Intel Wired LAN <intel-wired-lan@lists.osuosl.org>",
        "Date": "Mon, 15 Oct 2018 12:18:28 -0700",
        "Message-Id": "<20181015191829.17115-3-jacob.e.keller@intel.com>",
        "X-Mailer": "git-send-email 2.18.0.219.gaf81d287a9da",
        "In-Reply-To": "<20181015191829.17115-1-jacob.e.keller@intel.com>",
        "References": "<20181015191829.17115-1-jacob.e.keller@intel.com>",
        "Subject": "[Intel-wired-lan] [net-next 2/3] fm10k: ensure completer aborts are\n\tmarked as non-fatal after a resume",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.29",
        "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": "VF drivers can trigger PCIe completer aborts any time they read a queue\nthat they don't own. Even in nominal circumstances, it is not possible\nto prevent the VF driver from reading queues it doesn't own. VF drivers\nmay attempt to read queues it previously owned, but which it no longer\ndoes due to a PF reset.\n\nNormally these completer aborts aren't an issue. However, on some\nplatforms these trigger machine check errors. This is true even if we\nlower their severity from fatal to non-fatal. Indeed, we already have\ncode for lowering the severity.\n\nWe could attempt to mask these errors conditionally around resets, which\nis the most common time they would occur. However this would essentially\nbe a race between the PF and VF drivers, and we may still occasionally\nsee machine check exceptions on these strictly configured platforms.\n\nInstead, mask the errors entirely any time we resume VFs. By doing so,\nwe prevent the completer aborts from being sent to the parent PCIe\ndevice, and thus these strict platforms will not upgrade them into\nmachine check errors.\n\nAddtionally, we don't lose any information by masking these errors,\nbecause we'll still report VFs which attempt to access queues via the\nFUM_BAD_VF_QACCESS errors.\n\nWithout this change, on platforms where completer aborts cause machine\ncheck exceptions, the VF reading queues it doesn't own could crash the\nhost system. Masking the completer abort prevents this, so we should\nmask it for good, and not just around a PCIe reset. Otherwise malicious\nor misconfigured VFs could cause the host system to crash.\n\nBecause we are masking the error entirely, there is little reason to\nalso keep setting the severity bit, so that code is also removed.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/fm10k/fm10k_iov.c | 48 ++++++++++++--------\n 1 file changed, 28 insertions(+), 20 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c\nindex 74160c2095ee..5d4f1761dc0c 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c\n@@ -303,6 +303,28 @@ void fm10k_iov_suspend(struct pci_dev *pdev)\n \t}\n }\n \n+static void fm10k_mask_aer_comp_abort(struct pci_dev *pdev)\n+{\n+\tu32 err_mask;\n+\tint pos;\n+\n+\tpos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);\n+\tif (!pos)\n+\t\treturn;\n+\n+\t/* Mask the completion abort bit in the ERR_UNCOR_MASK register,\n+\t * preventing the device from reporting these errors to the upstream\n+\t * PCIe root device. This avoids bringing down platforms which upgrade\n+\t * non-fatal completer aborts into machine check exceptions. Completer\n+\t * aborts can occur whenever a VF reads a queue it doesn't own.\n+\t */\n+\tpci_read_config_dword(pdev, pos + PCI_ERR_UNCOR_MASK, &err_mask);\n+\terr_mask |= PCI_ERR_UNC_COMP_ABORT;\n+\tpci_write_config_dword(pdev, pos + PCI_ERR_UNCOR_MASK, err_mask);\n+\n+\tmmiowb();\n+}\n+\n int fm10k_iov_resume(struct pci_dev *pdev)\n {\n \tstruct fm10k_intfc *interface = pci_get_drvdata(pdev);\n@@ -318,6 +340,12 @@ int fm10k_iov_resume(struct pci_dev *pdev)\n \tif (!iov_data)\n \t\treturn -ENOMEM;\n \n+\t/* Lower severity of completer abort error reporting as\n+\t * the VFs can trigger this any time they read a queue\n+\t * that they don't own.\n+\t */\n+\tfm10k_mask_aer_comp_abort(pdev);\n+\n \t/* allocate hardware resources for the VFs */\n \thw->iov.ops.assign_resources(hw, num_vfs, num_vfs);\n \n@@ -461,20 +489,6 @@ void fm10k_iov_disable(struct pci_dev *pdev)\n \tfm10k_iov_free_data(pdev);\n }\n \n-static void fm10k_disable_aer_comp_abort(struct pci_dev *pdev)\n-{\n-\tu32 err_sev;\n-\tint pos;\n-\n-\tpos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_ERR);\n-\tif (!pos)\n-\t\treturn;\n-\n-\tpci_read_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, &err_sev);\n-\terr_sev &= ~PCI_ERR_UNC_COMP_ABORT;\n-\tpci_write_config_dword(pdev, pos + PCI_ERR_UNCOR_SEVER, err_sev);\n-}\n-\n int fm10k_iov_configure(struct pci_dev *pdev, int num_vfs)\n {\n \tint current_vfs = pci_num_vf(pdev);\n@@ -496,12 +510,6 @@ int fm10k_iov_configure(struct pci_dev *pdev, int num_vfs)\n \n \t/* allocate VFs if not already allocated */\n \tif (num_vfs && num_vfs != current_vfs) {\n-\t\t/* Disable completer abort error reporting as\n-\t\t * the VFs can trigger this any time they read a queue\n-\t\t * that they don't own.\n-\t\t */\n-\t\tfm10k_disable_aer_comp_abort(pdev);\n-\n \t\terr = pci_enable_sriov(pdev, num_vfs);\n \t\tif (err) {\n \t\t\tdev_err(&pdev->dev,\n",
    "prefixes": [
        "net-next",
        "2/3"
    ]
}