Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/1135840/?format=api
{ "id": 1135840, "url": "http://patchwork.ozlabs.org/api/patches/1135840/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20190723092454.3508-4-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": "<20190723092454.3508-4-anthony.l.nguyen@intel.com>", "list_archive_url": null, "date": "2019-07-23T09:24:44", "name": "[S23,v3,04/15] ice: Restructure VFs initialization flows", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": false, "hash": "24b2a897d8f06b5b25dbdb1e7796bab20f94db30", "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/20190723092454.3508-4-anthony.l.nguyen@intel.com/mbox/", "series": [ { "id": 121040, "url": "http://patchwork.ozlabs.org/api/series/121040/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=121040", "date": "2019-07-23T09:24:50", "name": "[S23,v3,01/15] ice: Implement ethtool ops for channels", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/121040/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/1135840/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/1135840/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.138; helo=whitealder.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 whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\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 45tR1d36wNz9s4Y\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 24 Jul 2019 03:54:13 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 0BA3781FCC;\n\tTue, 23 Jul 2019 17:54:12 +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 6bDOwPhH2g46; Tue, 23 Jul 2019 17:54:10 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 90B0F81F20;\n\tTue, 23 Jul 2019 17:54:10 +0000 (UTC)", "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 5A2AD1BF95A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 23 Jul 2019 17:54:07 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 52B6A81B76\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 23 Jul 2019 17:54:07 +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 wBK+v+EcG9R1 for <intel-wired-lan@lists.osuosl.org>;\n\tTue, 23 Jul 2019 17:54:00 +0000 (UTC)", "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id C1DE281E21\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 23 Jul 2019 17:54:00 +0000 (UTC)", "from orsmga005.jf.intel.com ([10.7.209.41])\n\tby orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t23 Jul 2019 10:53:58 -0700", "from unknown (HELO localhost.jf.intel.com) ([10.166.244.174])\n\tby orsmga005.jf.intel.com with ESMTP; 23 Jul 2019 10:53:58 -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,299,1559545200\"; d=\"scan'208\";a=\"344813713\"", "From": "Tony Nguyen <anthony.l.nguyen@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Tue, 23 Jul 2019 02:24:44 -0700", "Message-Id": "<20190723092454.3508-4-anthony.l.nguyen@intel.com>", "X-Mailer": "git-send-email 2.20.1", "In-Reply-To": "<20190723092454.3508-1-anthony.l.nguyen@intel.com>", "References": "<20190723092454.3508-1-anthony.l.nguyen@intel.com>", "MIME-Version": "1.0", "Subject": "[Intel-wired-lan] [PATCH S23 v3 04/15] ice: Restructure VFs\n\tinitialization flows", "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>", "Cc": "Akeem G Abodunrin <akeem.g.abodunrin@intel.com>", "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: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>\n\nThis patch restructures how VFs are configured, and resources allocated.\nInstead of freeing resources that were never allocated, and resetting\nempty VFs that have never been created - the new flow will just allocate\nresources for number of requested VFs based on the availability.\n\nDuring VFs initialization process, global interrupt is disabled, and\nrearmed after getting MSIX vectors for VFs. This allows immediate mailbox\ncommunications, instead of delaying it till later and VFs.\nPF communications resulted to using polling instead of actual interrupt.\nThe issue manifested when creating higher number of VFs (128 VFs) per PF.\n\nSigned-off-by: Akeem G Abodunrin <akeem.g.abodunrin@intel.com>\n---\n drivers/net/ethernet/intel/ice/ice.h | 1 +\n .../net/ethernet/intel/ice/ice_virtchnl_pf.c | 70 +++++++++++++------\n 2 files changed, 49 insertions(+), 22 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/ice/ice.h b/drivers/net/ethernet/intel/ice/ice.h\nindex 07950ac4869f..112bdb662ea2 100644\n--- a/drivers/net/ethernet/intel/ice/ice.h\n+++ b/drivers/net/ethernet/intel/ice/ice.h\n@@ -220,6 +220,7 @@ enum ice_state {\n \t__ICE_CFG_BUSY,\n \t__ICE_SERVICE_SCHED,\n \t__ICE_SERVICE_DIS,\n+\t__ICE_OICR_INTR_DIS,\t\t/* Global OICR interrupt disabled */\n \t__ICE_STATE_NBITS\t\t/* must be last */\n };\n \ndiff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c\nindex ce01cbe70ea4..4d41877fa06e 100644\n--- a/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c\n+++ b/drivers/net/ethernet/intel/ice/ice_virtchnl_pf.c\n@@ -974,6 +974,48 @@ ice_vf_set_vsi_promisc(struct ice_vf *vf, struct ice_vsi *vsi, u8 promisc_m,\n \treturn status;\n }\n \n+/**\n+ * ice_config_res_vfs - Finalize allocation of VFs resources in one go\n+ * @pf: pointer to the PF structure\n+ *\n+ * This function is being called as last part of resetting all VFs, or when\n+ * configuring VFs for the first time, where there is no resource to be freed\n+ * Returns true if resources were properly allocated for all VFs, and false\n+ * otherwise.\n+ */\n+static bool ice_config_res_vfs(struct ice_pf *pf)\n+{\n+\tstruct ice_hw *hw = &pf->hw;\n+\tstruct ice_vf *vf;\n+\tint v;\n+\n+\tif (ice_check_avail_res(pf)) {\n+\t\tdev_err(&pf->pdev->dev,\n+\t\t\t\"Cannot allocate VF resources, try with fewer number of VFs\\n\");\n+\t\treturn false;\n+\t}\n+\n+\t/* rearm global interrupts */\n+\tif (test_and_clear_bit(__ICE_OICR_INTR_DIS, pf->state))\n+\t\tice_irq_dynamic_ena(hw, NULL, NULL);\n+\n+\t/* Finish resetting each VF and allocate resources */\n+\tfor (v = 0; v < pf->num_alloc_vfs; v++) {\n+\t\tvf = &pf->vf[v];\n+\n+\t\tvf->num_vf_qs = pf->num_vf_qps;\n+\t\tdev_dbg(&pf->pdev->dev,\n+\t\t\t\"VF-id %d has %d queues configured\\n\",\n+\t\t\tvf->vf_id, vf->num_vf_qs);\n+\t\tice_cleanup_and_realloc_vf(vf);\n+\t}\n+\n+\tice_flush(hw);\n+\tclear_bit(__ICE_VF_DIS, pf->state);\n+\n+\treturn true;\n+}\n+\n /**\n * ice_reset_all_vfs - reset all allocated VFs in one go\n * @pf: pointer to the PF structure\n@@ -1066,25 +1108,8 @@ bool ice_reset_all_vfs(struct ice_pf *pf, bool is_vflr)\n \t\tdev_err(&pf->pdev->dev,\n \t\t\t\"Failed to free MSIX resources used by SR-IOV\\n\");\n \n-\tif (ice_check_avail_res(pf)) {\n-\t\tdev_err(&pf->pdev->dev,\n-\t\t\t\"Cannot allocate VF resources, try with fewer number of VFs\\n\");\n+\tif (!ice_config_res_vfs(pf))\n \t\treturn false;\n-\t}\n-\n-\t/* Finish the reset on each VF */\n-\tfor (v = 0; v < pf->num_alloc_vfs; v++) {\n-\t\tvf = &pf->vf[v];\n-\n-\t\tvf->num_vf_qs = pf->num_vf_qps;\n-\t\tdev_dbg(&pf->pdev->dev,\n-\t\t\t\"VF-id %d has %d queues configured\\n\",\n-\t\t\tvf->vf_id, vf->num_vf_qs);\n-\t\tice_cleanup_and_realloc_vf(vf);\n-\t}\n-\n-\tice_flush(hw);\n-\tclear_bit(__ICE_VF_DIS, pf->state);\n \n \treturn true;\n }\n@@ -1249,7 +1274,7 @@ static int ice_alloc_vfs(struct ice_pf *pf, u16 num_alloc_vfs)\n \t/* Disable global interrupt 0 so we don't try to handle the VFLR. */\n \twr32(hw, GLINT_DYN_CTL(pf->oicr_idx),\n \t ICE_ITR_NONE << GLINT_DYN_CTL_ITR_INDX_S);\n-\n+\tset_bit(__ICE_OICR_INTR_DIS, pf->state);\n \tice_flush(hw);\n \n \tret = pci_enable_sriov(pf->pdev, num_alloc_vfs);\n@@ -1278,13 +1303,13 @@ static int ice_alloc_vfs(struct ice_pf *pf, u16 num_alloc_vfs)\n \t}\n \tpf->num_alloc_vfs = num_alloc_vfs;\n \n-\t/* VF resources get allocated during reset */\n-\tif (!ice_reset_all_vfs(pf, true)) {\n+\t/* VF resources get allocated with initialization */\n+\tif (!ice_config_res_vfs(pf)) {\n \t\tret = -EIO;\n \t\tgoto err_unroll_sriov;\n \t}\n \n-\tgoto err_unroll_intr;\n+\treturn ret;\n \n err_unroll_sriov:\n \tpf->vf = NULL;\n@@ -1296,6 +1321,7 @@ static int ice_alloc_vfs(struct ice_pf *pf, u16 num_alloc_vfs)\n err_unroll_intr:\n \t/* rearm interrupts here */\n \tice_irq_dynamic_ena(hw, NULL, NULL);\n+\tclear_bit(__ICE_OICR_INTR_DIS, pf->state);\n \treturn ret;\n }\n \n", "prefixes": [ "S23", "v3", "04/15" ] }