Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1157163/?format=api
{ "id": 1157163, "url": "http://patchwork.ozlabs.org/api/patches/1157163/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20190903083108.19593-1-anthony.l.nguyen@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": "<20190903083108.19593-1-anthony.l.nguyen@intel.com>", "list_archive_url": null, "date": "2019-09-03T08:31:00", "name": "[S28,v2,1/9] ice: Reliably reset VFs", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "0f8d38ca11e26ac1faca02f2a10b53f6ceeef9fd", "submitter": { "id": 68875, "url": "http://patchwork.ozlabs.org/api/people/68875/?format=api", "name": "Tony Nguyen", "email": "anthony.l.nguyen@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/20190903083108.19593-1-anthony.l.nguyen@intel.com/mbox/", "series": [ { "id": 128806, "url": "http://patchwork.ozlabs.org/api/series/128806/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=128806", "date": "2019-09-03T08:31:06", "name": "[S28,v2,1/9] ice: Reliably reset VFs", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/128806/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1157163/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1157163/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.137; helo=fraxinus.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 fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\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 46NCr84Dlzz9sPQ\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 4 Sep 2019 03:00:24 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 17897868E6;\n\tTue, 3 Sep 2019 17:00:23 +0000 (UTC)", "from fraxinus.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id 4m2VqEtA1XJZ; Tue, 3 Sep 2019 17:00:22 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 0A7D786341;\n\tTue, 3 Sep 2019 17:00:22 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 1236E1BF27F\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 3 Sep 2019 17:00:18 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 0C72787E3C\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 3 Sep 2019 17:00:18 +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 aU4OAOO3jYxf for <intel-wired-lan@lists.osuosl.org>;\n\tTue, 3 Sep 2019 17:00:15 +0000 (UTC)", "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby hemlock.osuosl.org (Postfix) with ESMTPS id 688F287E75\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 3 Sep 2019 17:00:15 +0000 (UTC)", "from orsmga006.jf.intel.com ([10.7.209.51])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t03 Sep 2019 10:00:13 -0700", "from unknown (HELO localhost.jf.intel.com) ([10.166.244.174])\n\tby orsmga006.jf.intel.com with ESMTP; 03 Sep 2019 10:00:13 -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.64,463,1559545200\"; d=\"scan'208\";a=\"187320657\"", "From": "Tony Nguyen <anthony.l.nguyen@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Tue, 3 Sep 2019 01:31:00 -0700", "Message-Id": "<20190903083108.19593-1-anthony.l.nguyen@intel.com>", "X-Mailer": "git-send-email 2.20.1", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [PATCH S28 v2 1/9] ice: Reliably reset VFs", "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>", "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": "From: Mitch Williams <mitch.a.williams@intel.com>\n\nWhen a PFR (or bigger reset) occurs, the device clears the VF_MBX_ARQLEN\nregister for all VFs. But if a VFR is triggered by a VF, the device does\nNOT clear this register, and the VF driver will never see the reset.\n\nWhen this happens, the VF driver will eventually timeout and attempt\nrecovery, and usually it will be successful. But this makes resets take\na long time and there are occasional failures.\n\nWe cannot just blithely clear this register on every reset; this has\nbeen shown to cause synchronization problems when a PFR is triggered\nwith a large number of VFs.\n\nFix this by clearing VF_MBX_ARQLEN when the reset source is not PFR.\nGlobR will trigger PFR, so this test catches that occurrence as well.\n\nSigned-off-by: Mitch Williams <mitch.a.williams@intel.com>\n---\n drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c | 16 ++++++++++------\n 1 file changed, 10 insertions(+), 6 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c\nindex c38939b1d496..3ba6613048ef 100644\n--- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c\n+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c\n@@ -353,12 +353,13 @@ void ice_free_vfs(struct ice_pf *pf)\n * ice_trigger_vf_reset - Reset a VF on HW\n * @vf: pointer to the VF structure\n * @is_vflr: true if VFLR was issued, false if not\n+ * @is_pfr: true if the reset was triggered due to a previous PFR\n *\n * Trigger hardware to start a reset for a particular VF. Expects the caller\n * to wait the proper amount of time to allow hardware to reset the VF before\n * it cleans up and restores VF functionality.\n */\n-static void ice_trigger_vf_reset(struct ice_vf *vf, bool is_vflr)\n+static void ice_trigger_vf_reset(struct ice_vf *vf, bool is_vflr, bool is_pfr)\n {\n \tstruct ice_pf *pf = vf->pf;\n \tu32 reg, reg_idx, bit_idx;\n@@ -379,10 +380,13 @@ static void ice_trigger_vf_reset(struct ice_vf *vf, bool is_vflr)\n \t */\n \tclear_bit(ICE_VF_STATE_INIT, vf->vf_states);\n \n-\t/* Clear the VF's ARQLEN register. This is how the VF detects reset,\n-\t * since the VFGEN_RSTAT register doesn't stick at 0 after reset.\n+\t/* VF_MBX_ARQLEN is cleared by PFR, so the driver needs to clear it\n+\t * in the case of VFR. If this is done for PFR, it can mess up VF\n+\t * resets because the VF driver may already have started cleanup\n+\t * by the time we get here.\n \t */\n-\twr32(hw, VF_MBX_ARQLEN(vf_abs_id), 0);\n+\tif (!is_pfr)\n+\t\twr32(hw, VF_MBX_ARQLEN(vf_abs_id), 0);\n \n \t/* In the case of a VFLR, the HW has already reset the VF and we\n \t * just need to clean up, so don't hit the VFRTRIG register.\n@@ -1072,7 +1076,7 @@ bool ice_reset_all_vfs(struct ice_pf *pf, bool is_vflr)\n \n \t/* Begin reset on all VFs at once */\n \tfor (v = 0; v < pf->num_alloc_vfs; v++)\n-\t\tice_trigger_vf_reset(&pf->vf[v], is_vflr);\n+\t\tice_trigger_vf_reset(&pf->vf[v], is_vflr, true);\n \n \tfor (v = 0; v < pf->num_alloc_vfs; v++) {\n \t\tstruct ice_vsi *vsi;\n@@ -1172,7 +1176,7 @@ static bool ice_reset_vf(struct ice_vf *vf, bool is_vflr)\n \tif (test_and_set_bit(ICE_VF_STATE_DIS, vf->vf_states))\n \t\treturn false;\n \n-\tice_trigger_vf_reset(vf, is_vflr);\n+\tice_trigger_vf_reset(vf, is_vflr, false);\n \n \tvsi = pf->vsi[vf->lan_vsi_idx];\n \n", "prefixes": [ "S28", "v2", "1/9" ] }