Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/566209/?format=api
{ "id": 566209, "url": "http://patchwork.ozlabs.org/api/patches/566209/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1452554307-20937-7-git-send-email-joshua.a.hay@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": "<1452554307-20937-7-git-send-email-joshua.a.hay@intel.com>", "list_archive_url": null, "date": "2016-01-11T23:18:18", "name": "[next,S27,06/15] i40e: Refactor force_wb and WB_ON_ITR functionality code", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": false, "hash": "915c701dafb31b2b17da4e0847c97bed5cfba4a4", "submitter": { "id": 19461, "url": "http://patchwork.ozlabs.org/api/people/19461/?format=api", "name": "Joshua Hay", "email": "joshua.a.hay@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/1452554307-20937-7-git-send-email-joshua.a.hay@intel.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/566209/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/566209/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<intel-wired-lan-bounces@lists.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 fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\tby ozlabs.org (Postfix) with ESMTP id C4496140291\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Jan 2016 10:18:38 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 262B789FEB;\n\tMon, 11 Jan 2016 23:18:38 +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 IWpLCosHK4hu; Mon, 11 Jan 2016 23:18:35 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 0E8AE89FC1;\n\tMon, 11 Jan 2016 23:18:35 +0000 (UTC)", "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id CEA821C11E9\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 11 Jan 2016 23:18:32 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 22D158AA15\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 11 Jan 2016 23:18:32 +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 sW7BSH4svwJh for <intel-wired-lan@lists.osuosl.org>;\n\tMon, 11 Jan 2016 23:18:30 +0000 (UTC)", "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 726218AAD9\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 11 Jan 2016 23:18:29 +0000 (UTC)", "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga103.jf.intel.com with ESMTP; 11 Jan 2016 15:18:30 -0800", "from jahay1-mobl2.amr.corp.intel.com (HELO\n\tlocalhost.localdomain.localdomain) ([134.134.176.82])\n\tby orsmga002.jf.intel.com with ESMTP; 11 Jan 2016 15:18:29 -0800" ], "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.20,555,1444719600\"; d=\"scan'208\";a=\"888496212\"", "From": "Joshua Hay <joshua.a.hay@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Mon, 11 Jan 2016 15:18:18 -0800", "Message-Id": "<1452554307-20937-7-git-send-email-joshua.a.hay@intel.com>", "X-Mailer": "git-send-email 2.1.0", "In-Reply-To": "<1452554307-20937-1-git-send-email-joshua.a.hay@intel.com>", "References": "<1452554307-20937-1-git-send-email-joshua.a.hay@intel.com>", "Subject": "[Intel-wired-lan] [next PATCH S27 06/15] i40e: Refactor force_wb\n\tand WB_ON_ITR functionality code", "X-BeenThere": "intel-wired-lan@lists.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.lists.osuosl.org>", "List-Unsubscribe": "<http://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.osuosl.org?subject=unsubscribe>", "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>", "List-Post": "<mailto:intel-wired-lan@lists.osuosl.org>", "List-Help": "<mailto:intel-wired-lan-request@lists.osuosl.org?subject=help>", "List-Subscribe": "<http://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@lists.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@lists.osuosl.org", "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@lists.osuosl.org>" }, "content": "From: Anjali Singhai Jain <anjali.singhai@intel.com>\n\nNow that the Force-WriteBack functionality in X710/XL710 devices\nhas been moved out of the clean routine and into the service task,\nwe need to make sure WriteBack-On-ITR is separated out since it\nis still called from clean.\n\nIn the X722 devices, Force-WriteBack implies WriteBack-On-ITR but\nwithout the interrupt, which put the driver into a missed\ninterrupt scenario and a potential tx-timeout report.\n\nWith this patch, we break the two functions out, and call the\nappropriate ones at the right place. This will avoid creating missed\ninterrupt like scenarios for X722 devices.\n\nAlso update copyright year in file headers.\n\nSigned-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>\nChange-ID: Iacbde39f95f332f82be8736864675052c3583a40\n---\nTesting Hints: Stress test X722 devices for tx_timeout, see that the\ntx_lost_interrupt stat count goes down with the patch applied.\n\n drivers/net/ethernet/intel/i40e/i40e_txrx.c | 57 ++++++++++++++----------\n drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 63 +++++++++++++++------------\n drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 3 +-\n 3 files changed, 72 insertions(+), 51 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex ca5f088..a01192a 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -1,7 +1,7 @@\n /*******************************************************************************\n *\n * Intel Ethernet Controller XL710 Family Linux Driver\n- * Copyright(c) 2013 - 2014 Intel Corporation.\n+ * Copyright(c) 2013 - 2016 Intel Corporation.\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms and conditions of the GNU General Public License,\n@@ -774,37 +774,48 @@ static bool i40e_clean_tx_irq(struct i40e_ring *tx_ring, int budget)\n }\n \n /**\n- * i40e_force_wb - Arm hardware to do a wb on noncache aligned descriptors\n+ * i40e_enable_wb_on_itr - Arm hardware to do a wb, interrupts are not enabled\n * @vsi: the VSI we care about\n- * @q_vector: the vector on which to force writeback\n+ * @q_vector: the vector on which to enable writeback\n *\n **/\n-void i40e_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n+static void i40e_enable_wb_on_itr(struct i40e_vsi *vsi,\n+\t\t\t\t struct i40e_q_vector *q_vector)\n {\n \tu16 flags = q_vector->tx.ring[0].flags;\n+\tu32 val;\n \n-\tif (flags & I40E_TXR_FLAGS_WB_ON_ITR) {\n-\t\tu32 val;\n+\tif (!(flags & I40E_TXR_FLAGS_WB_ON_ITR))\n+\t\treturn;\n \n-\t\tif (q_vector->arm_wb_state)\n-\t\t\treturn;\n+\tif (q_vector->arm_wb_state)\n+\t\treturn;\n \n-\t\tif (vsi->back->flags & I40E_FLAG_MSIX_ENABLED) {\n-\t\t\tval = I40E_PFINT_DYN_CTLN_WB_ON_ITR_MASK |\n-\t\t\t I40E_PFINT_DYN_CTLN_ITR_INDX_MASK; /* set noitr */\n+\tif (vsi->back->flags & I40E_FLAG_MSIX_ENABLED) {\n+\t\tval = I40E_PFINT_DYN_CTLN_WB_ON_ITR_MASK |\n+\t\t I40E_PFINT_DYN_CTLN_ITR_INDX_MASK; /* set noitr */\n \n-\t\t\twr32(&vsi->back->hw,\n-\t\t\t I40E_PFINT_DYN_CTLN(q_vector->v_idx +\n-\t\t\t\t\t\t vsi->base_vector - 1),\n-\t\t\t val);\n-\t\t} else {\n-\t\t\tval = I40E_PFINT_DYN_CTL0_WB_ON_ITR_MASK |\n-\t\t\t I40E_PFINT_DYN_CTL0_ITR_INDX_MASK; /* set noitr */\n+\t\twr32(&vsi->back->hw,\n+\t\t I40E_PFINT_DYN_CTLN(q_vector->v_idx + vsi->base_vector - 1),\n+\t\t val);\n+\t} else {\n+\t\tval = I40E_PFINT_DYN_CTL0_WB_ON_ITR_MASK |\n+\t\t I40E_PFINT_DYN_CTL0_ITR_INDX_MASK; /* set noitr */\n \n-\t\t\twr32(&vsi->back->hw, I40E_PFINT_DYN_CTL0, val);\n-\t\t}\n-\t\tq_vector->arm_wb_state = true;\n-\t} else if (vsi->back->flags & I40E_FLAG_MSIX_ENABLED) {\n+\t\twr32(&vsi->back->hw, I40E_PFINT_DYN_CTL0, val);\n+\t}\n+\tq_vector->arm_wb_state = true;\n+}\n+\n+/**\n+ * i40e_force_wb - Issue SW Interrupt so HW does a wb\n+ * @vsi: the VSI we care about\n+ * @q_vector: the vector on which to force writeback\n+ *\n+ **/\n+void i40e_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n+{\n+\tif (vsi->back->flags & I40E_FLAG_MSIX_ENABLED) {\n \t\tu32 val = I40E_PFINT_DYN_CTLN_INTENA_MASK |\n \t\t\t I40E_PFINT_DYN_CTLN_ITR_INDX_MASK | /* set noitr */\n \t\t\t I40E_PFINT_DYN_CTLN_SWINT_TRIG_MASK |\n@@ -1946,7 +1957,7 @@ int i40e_napi_poll(struct napi_struct *napi, int budget)\n tx_only:\n \t\tif (arm_wb) {\n \t\t\tq_vector->tx.ring[0].tx_stats.tx_force_wb++;\n-\t\t\ti40e_force_wb(vsi, q_vector);\n+\t\t\ti40e_enable_wb_on_itr(vsi, q_vector);\n \t\t}\n \t\treturn budget;\n \t}\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\nindex 722ed25..6a0d190 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n@@ -1,7 +1,7 @@\n /*******************************************************************************\n *\n * Intel Ethernet Controller XL710 Family Linux Virtual Function Driver\n- * Copyright(c) 2013 - 2014 Intel Corporation.\n+ * Copyright(c) 2013 - 2016 Intel Corporation.\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms and conditions of the GNU General Public License,\n@@ -292,40 +292,49 @@ static bool i40e_clean_tx_irq(struct i40e_ring *tx_ring, int budget)\n }\n \n /**\n- * i40evf_force_wb -Arm hardware to do a wb on noncache aligned descriptors\n+ * i40evf_enable_wb_on_itr - Arm hardware to do a wb, interrupts are not enabled\n * @vsi: the VSI we care about\n- * @q_vector: the vector on which to force writeback\n+ * @q_vector: the vector on which to enable writeback\n *\n **/\n-static void i40evf_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n+static void i40e_enable_wb_on_itr(struct i40e_vsi *vsi,\n+\t\t\t\t struct i40e_q_vector *q_vector)\n {\n \tu16 flags = q_vector->tx.ring[0].flags;\n+\tu32 val;\n \n-\tif (flags & I40E_TXR_FLAGS_WB_ON_ITR) {\n-\t\tu32 val;\n+\tif (!(flags & I40E_TXR_FLAGS_WB_ON_ITR))\n+\t\treturn;\n \n-\t\tif (q_vector->arm_wb_state)\n-\t\t\treturn;\n+\tif (q_vector->arm_wb_state)\n+\t\treturn;\n \n-\t\tval = I40E_VFINT_DYN_CTLN1_WB_ON_ITR_MASK |\n-\t\t I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK; /* set noitr */\n+\tval = I40E_VFINT_DYN_CTLN1_WB_ON_ITR_MASK |\n+\t I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK; /* set noitr */\n \n-\t\twr32(&vsi->back->hw,\n-\t\t I40E_VFINT_DYN_CTLN1(q_vector->v_idx +\n-\t\t\t\t\t vsi->base_vector - 1),\n-\t\t val);\n-\t\tq_vector->arm_wb_state = true;\n-\t} else {\n-\t\tu32 val = I40E_VFINT_DYN_CTLN1_INTENA_MASK |\n-\t\t\t I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK | /* set noitr */\n-\t\t\t I40E_VFINT_DYN_CTLN1_SWINT_TRIG_MASK |\n-\t\t\t I40E_VFINT_DYN_CTLN1_SW_ITR_INDX_ENA_MASK;\n-\t\t\t /* allow 00 to be written to the index */\n-\n-\t\twr32(&vsi->back->hw,\n-\t\t I40E_VFINT_DYN_CTLN1(q_vector->v_idx +\n-\t\t\t\t\t vsi->base_vector - 1), val);\n-\t}\n+\twr32(&vsi->back->hw,\n+\t I40E_VFINT_DYN_CTLN1(q_vector->v_idx +\n+\t\t\t\t vsi->base_vector - 1), val);\n+\tq_vector->arm_wb_state = true;\n+}\n+\n+/**\n+ * i40evf_force_wb - Issue SW Interrupt so HW does a wb\n+ * @vsi: the VSI we care about\n+ * @q_vector: the vector on which to force writeback\n+ *\n+ **/\n+void i40evf_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n+{\n+\tu32 val = I40E_VFINT_DYN_CTLN1_INTENA_MASK |\n+\t\t I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK | /* set noitr */\n+\t\t I40E_VFINT_DYN_CTLN1_SWINT_TRIG_MASK |\n+\t\t I40E_VFINT_DYN_CTLN1_SW_ITR_INDX_ENA_MASK\n+\t\t /* allow 00 to be written to the index */;\n+\n+\twr32(&vsi->back->hw,\n+\t I40E_VFINT_DYN_CTLN1(q_vector->v_idx + vsi->base_vector - 1),\n+\t val);\n }\n \n /**\n@@ -1384,7 +1393,7 @@ int i40evf_napi_poll(struct napi_struct *napi, int budget)\n tx_only:\n \t\tif (arm_wb) {\n \t\t\tq_vector->tx.ring[0].tx_stats.tx_force_wb++;\n-\t\t\ti40evf_force_wb(vsi, q_vector);\n+\t\t\ti40e_enable_wb_on_itr(vsi, q_vector);\n \t\t}\n \t\treturn budget;\n \t}\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\nindex d7950b1..a565e6f 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n@@ -1,7 +1,7 @@\n /*******************************************************************************\n *\n * Intel Ethernet Controller XL710 Family Linux Virtual Function Driver\n- * Copyright(c) 2013 - 2014 Intel Corporation.\n+ * Copyright(c) 2013 - 2016 Intel Corporation.\n *\n * This program is free software; you can redistribute it and/or modify it\n * under the terms and conditions of the GNU General Public License,\n@@ -324,6 +324,7 @@ int i40evf_setup_rx_descriptors(struct i40e_ring *rx_ring);\n void i40evf_free_tx_resources(struct i40e_ring *tx_ring);\n void i40evf_free_rx_resources(struct i40e_ring *rx_ring);\n int i40evf_napi_poll(struct napi_struct *napi, int budget);\n+void i40evf_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector);\n u32 i40evf_get_tx_pending(struct i40e_ring *ring);\n \n /**\n", "prefixes": [ "next", "S27", "06/15" ] }