get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 770017,
    "url": "http://patchwork.ozlabs.org/api/patches/770017/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20170601224051.6106-8-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": "<20170601224051.6106-8-jacob.e.keller@intel.com>",
    "list_archive_url": null,
    "date": "2017-06-01T22:40:43",
    "name": "[07/15] fm10k: don't loop while resetting VFs due to VFLR event",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "df58155ab17970dec242338c3af7e7597c294b71",
    "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/20170601224051.6106-8-jacob.e.keller@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/770017/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/770017/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"
        ],
        "Received": [
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\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 3wf2Px4Qn7z9sN8\n\tfor <incoming@patchwork.ozlabs.org>;\n\tFri,  2 Jun 2017 08:41:25 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 180C830C69;\n\tThu,  1 Jun 2017 22:41:24 +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 SzXLQFGDY7De; Thu,  1 Jun 2017 22:41:21 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby silver.osuosl.org (Postfix) with ESMTP id 3BDCF30C70;\n\tThu,  1 Jun 2017 22:41:11 +0000 (UTC)",
            "from silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ash.osuosl.org (Postfix) with ESMTP id 1F03D1C0479\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  1 Jun 2017 22:40:59 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id 16F6230C68\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  1 Jun 2017 22:40:59 +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 PFT52Kyd9KHk for <intel-wired-lan@lists.osuosl.org>;\n\tThu,  1 Jun 2017 22:40:56 +0000 (UTC)",
            "from mga14.intel.com (mga14.intel.com [192.55.52.115])\n\tby silver.osuosl.org (Postfix) with ESMTPS id 8530C30C6B\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  1 Jun 2017 22:40:56 +0000 (UTC)",
            "from fmsmga001.fm.intel.com ([10.253.24.23])\n\tby fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t01 Jun 2017 15:40:55 -0700",
            "from jekeller-desk.amr.corp.intel.com ([10.166.35.158])\n\tby fmsmga001.fm.intel.com with ESMTP; 01 Jun 2017 15:40:55 -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.39,281,1493708400\"; d=\"scan'208\";\n\ta=\"1155582862\"",
        "From": "Jacob Keller <jacob.e.keller@intel.com>",
        "To": "Intel Wired LAN <intel-wired-lan@lists.osuosl.org>",
        "Date": "Thu,  1 Jun 2017 15:40:43 -0700",
        "Message-Id": "<20170601224051.6106-8-jacob.e.keller@intel.com>",
        "X-Mailer": "git-send-email 2.13.0.311.g0339965c70d6",
        "In-Reply-To": "<20170601224051.6106-1-jacob.e.keller@intel.com>",
        "References": "<20170601224051.6106-1-jacob.e.keller@intel.com>",
        "Subject": "[Intel-wired-lan] [PATCH 07/15] fm10k: don't loop while resetting\n\tVFs due to VFLR event",
        "X-BeenThere": "intel-wired-lan@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.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": "We've always had a really weird looping construction for resetting VFs.\nWe read the VFLRE register and reset the VF if the corresponding bit is\nset, which makes sense. However we loop continuously until we no longer\nhave any bits left unset. At first this makes sense, as a sort of \"keep\ntrying until we succeed\" concept.\n\nUnfortunately this causes a problem if we happen to surprise remove\nwhile this code is executing, because in this case we'll always read all\n1s for the VFLRE register. This results in a hard lockup on the CPU\nbecause the loop will never terminate.\n\nBecause our own reset function will clear the VFLR event register\nalways, (except when we've lost PCIe link obviously) there is no real\nreason to loop. In practice, we'll loop over once and find that no VFs\nare pending anymore.\n\nLets just check once. Since we're clear the notification when we reset\nthere's no benefit to the loop. Additionally, there shouldn't be a race\nas future VLFRE events should trigger an interrupt. Additionally, we\ndidn't warn or do anything in the looped case anyways.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/fm10k/fm10k_iov.c | 24 +++++++++++-------------\n 1 file changed, 11 insertions(+), 13 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c\nindex dfc88a463735..03897720bf0b 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k_iov.c\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k_iov.c\n@@ -66,23 +66,21 @@ s32 fm10k_iov_event(struct fm10k_intfc *interface)\n \t\tgoto read_unlock;\n \n \t/* read VFLRE to determine if any VFs have been reset */\n-\tdo {\n-\t\tvflre = fm10k_read_reg(hw, FM10K_PFVFLRE(1));\n-\t\tvflre <<= 32;\n-\t\tvflre |= fm10k_read_reg(hw, FM10K_PFVFLRE(0));\n+\tvflre = fm10k_read_reg(hw, FM10K_PFVFLRE(1));\n+\tvflre <<= 32;\n+\tvflre |= fm10k_read_reg(hw, FM10K_PFVFLRE(0));\n \n-\t\ti = iov_data->num_vfs;\n+\ti = iov_data->num_vfs;\n \n-\t\tfor (vflre <<= 64 - i; vflre && i--; vflre += vflre) {\n-\t\t\tstruct fm10k_vf_info *vf_info = &iov_data->vf_info[i];\n+\tfor (vflre <<= 64 - i; vflre && i--; vflre += vflre) {\n+\t\tstruct fm10k_vf_info *vf_info = &iov_data->vf_info[i];\n \n-\t\t\tif (vflre >= 0)\n-\t\t\t\tcontinue;\n+\t\tif (vflre >= 0)\n+\t\t\tcontinue;\n \n-\t\t\thw->iov.ops.reset_resources(hw, vf_info);\n-\t\t\tvf_info->mbx.ops.connect(hw, &vf_info->mbx);\n-\t\t}\n-\t} while (i != iov_data->num_vfs);\n+\t\thw->iov.ops.reset_resources(hw, vf_info);\n+\t\tvf_info->mbx.ops.connect(hw, &vf_info->mbx);\n+\t}\n \n read_unlock:\n \trcu_read_unlock();\n",
    "prefixes": [
        "07/15"
    ]
}