Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/567220/?format=api
{ "id": 567220, "url": "http://patchwork.ozlabs.org/api/patches/567220/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1452732712-12248-9-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": "<1452732712-12248-9-git-send-email-joshua.a.hay@intel.com>", "list_archive_url": null, "date": "2016-01-14T00:51:45", "name": "[v2,next,S27,08/15] i40e/i40evf: don't lose interrupts", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "cfc7d2b47a81a7a5b1afa537729bb8ed3c9a4c40", "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/1452732712-12248-9-git-send-email-joshua.a.hay@intel.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/567220/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/567220/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 A0B15140B96\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 14 Jan 2016 11:52:06 +1100 (AEDT)", "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id C53C1A5944;\n\tThu, 14 Jan 2016 00:52:05 +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 EPTf94sNiTcK; Thu, 14 Jan 2016 00:52:03 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 6BA4CA594F;\n\tThu, 14 Jan 2016 00:52:01 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 7FBA11C0F4A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 14 Jan 2016 00:51:55 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 7C5E28A7BC\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 14 Jan 2016 00:51:55 +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 49475ep8WK2L for <intel-wired-lan@lists.osuosl.org>;\n\tThu, 14 Jan 2016 00:51:53 +0000 (UTC)", "from mga03.intel.com (mga03.intel.com [134.134.136.65])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 5316593149\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu, 14 Jan 2016 00:51:53 +0000 (UTC)", "from orsmga002.jf.intel.com ([10.7.209.21])\n\tby orsmga103.jf.intel.com with ESMTP; 13 Jan 2016 16:51:52 -0800", "from jahay1-mobl2.amr.corp.intel.com (HELO\n\tlocalhost.localdomain.localdomain) ([134.134.176.160])\n\tby orsmga002.jf.intel.com with ESMTP; 13 Jan 2016 16:51:52 -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.22,291,1449561600\"; d=\"scan'208\";a=\"890056923\"", "From": "Joshua Hay <joshua.a.hay@intel.com>", "To": "intel-wired-lan@lists.osuosl.org", "Date": "Wed, 13 Jan 2016 16:51:45 -0800", "Message-Id": "<1452732712-12248-9-git-send-email-joshua.a.hay@intel.com>", "X-Mailer": "git-send-email 2.1.0", "In-Reply-To": "<1452732712-12248-1-git-send-email-joshua.a.hay@intel.com>", "References": "<1452732712-12248-1-git-send-email-joshua.a.hay@intel.com>", "Subject": "[Intel-wired-lan] [v2 next PATCH S27 08/15] i40e/i40evf: don't lose\n\tinterrupts", "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: Jesse Brandeburg <jesse.brandeburg@intel.com>\n\nWhile re-enabling interrupts the driver would clear all pending\ncauses. This meant that if an interrupt was generated while the driver\nwas cleaning or polling with interrupts disabled, then that interrupt\nwas lost. This could cause a queue to become dead, especially for\nreceive. Refactored the enable_icr0 function in order to allow\nit to be decided by the caller whether the CLEARPBA (clear pending\nevents) bit will be set while re-enabling the interrupt.\n\nAlso update copyright year in file headers.\n\nSigned-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>\nChange-ID: Ic1db100a05e13c98919057696db147a258ca365a\n---\nTesting Hints: use pktgen or a traffic generator to send packets to\nthe device and force it to enter polling. If all queues are in use,\nusually a few of the queues will quit receiving.\n\n drivers/net/ethernet/intel/i40e/i40e.h | 7 +++++--\n drivers/net/ethernet/intel/i40e/i40e_main.c | 11 ++++++-----\n drivers/net/ethernet/intel/i40e/i40e_txrx.c | 6 ++++--\n drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 4 ++--\n drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 4 +++-\n 5 files changed, 20 insertions(+), 12 deletions(-)", "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h\nindex bb07e05..141c5c0 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e.h\n+++ b/drivers/net/ethernet/intel/i40e/i40e.h\n@@ -1,7 +1,7 @@\n /*******************************************************************************\n *\n * Intel Ethernet Controller XL710 Family Linux Driver\n- * Copyright(c) 2013 - 2015 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@@ -767,6 +767,9 @@ static inline void i40e_irq_dynamic_enable(struct i40e_vsi *vsi, int vector)\n \tstruct i40e_hw *hw = &pf->hw;\n \tu32 val;\n \n+\t/* definitely clear the PBA here, as this function is meant to\n+\t * clean out all previous interrupts AND enable the interrupt\n+\t */\n \tval = I40E_PFINT_DYN_CTLN_INTENA_MASK |\n \t I40E_PFINT_DYN_CTLN_CLEARPBA_MASK |\n \t (I40E_ITR_NONE << I40E_PFINT_DYN_CTLN_ITR_INDX_SHIFT);\n@@ -775,7 +778,7 @@ static inline void i40e_irq_dynamic_enable(struct i40e_vsi *vsi, int vector)\n }\n \n void i40e_irq_dynamic_disable_icr0(struct i40e_pf *pf);\n-void i40e_irq_dynamic_enable_icr0(struct i40e_pf *pf);\n+void i40e_irq_dynamic_enable_icr0(struct i40e_pf *pf, bool clearpba);\n #ifdef I40E_FCOE\n struct rtnl_link_stats64 *i40e_get_netdev_stats_struct(\n \t\t\t\t\t struct net_device *netdev,\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c\nindex 1c03ff6..b9a7b31 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_main.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c\n@@ -3257,14 +3257,15 @@ void i40e_irq_dynamic_disable_icr0(struct i40e_pf *pf)\n /**\n * i40e_irq_dynamic_enable_icr0 - Enable default interrupt generation for icr0\n * @pf: board private structure\n+ * @clearpba: true when all pending interrupt events should be cleared\n **/\n-void i40e_irq_dynamic_enable_icr0(struct i40e_pf *pf)\n+void i40e_irq_dynamic_enable_icr0(struct i40e_pf *pf, bool clearpba)\n {\n \tstruct i40e_hw *hw = &pf->hw;\n \tu32 val;\n \n \tval = I40E_PFINT_DYN_CTL0_INTENA_MASK |\n-\t I40E_PFINT_DYN_CTL0_CLEARPBA_MASK |\n+\t (clearpba ? I40E_PFINT_DYN_CTL0_CLEARPBA_MASK : 0) |\n \t (I40E_ITR_NONE << I40E_PFINT_DYN_CTL0_ITR_INDX_SHIFT);\n \n \twr32(hw, I40E_PFINT_DYN_CTL0, val);\n@@ -3396,7 +3397,7 @@ static int i40e_vsi_enable_irq(struct i40e_vsi *vsi)\n \t\tfor (i = 0; i < vsi->num_q_vectors; i++)\n \t\t\ti40e_irq_dynamic_enable(vsi, i);\n \t} else {\n-\t\ti40e_irq_dynamic_enable_icr0(pf);\n+\t\ti40e_irq_dynamic_enable_icr0(pf, true);\n \t}\n \n \ti40e_flush(&pf->hw);\n@@ -3542,7 +3543,7 @@ enable_intr:\n \twr32(hw, I40E_PFINT_ICR0_ENA, ena_mask);\n \tif (!test_bit(__I40E_DOWN, &pf->state)) {\n \t\ti40e_service_event_schedule(pf);\n-\t\ti40e_irq_dynamic_enable_icr0(pf);\n+\t\ti40e_irq_dynamic_enable_icr0(pf, false);\n \t}\n \n \treturn ret;\n@@ -7851,7 +7852,7 @@ static int i40e_setup_misc_vector(struct i40e_pf *pf)\n \n \ti40e_flush(hw);\n \n-\ti40e_irq_dynamic_enable_icr0(pf);\n+\ti40e_irq_dynamic_enable_icr0(pf, true);\n \n \treturn err;\n }\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex 85561f6..d4e149b 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -1810,7 +1810,9 @@ static u32 i40e_buildreg_itr(const int type, const u16 itr)\n \tu32 val;\n \n \tval = I40E_PFINT_DYN_CTLN_INTENA_MASK |\n-\t I40E_PFINT_DYN_CTLN_CLEARPBA_MASK |\n+\t /* Don't clear PBA because that can cause lost interrupts that\n+\t * came in while we were cleaning/polling\n+\t */\n \t (type << I40E_PFINT_DYN_CTLN_ITR_INDX_SHIFT) |\n \t (itr << I40E_PFINT_DYN_CTLN_INTERVAL_SHIFT);\n \n@@ -1983,7 +1985,7 @@ tx_only:\n \t\tqval = rd32(hw, I40E_QINT_TQCTL(0)) |\n \t\t I40E_QINT_TQCTL_CAUSE_ENA_MASK;\n \t\twr32(hw, I40E_QINT_TQCTL(0), qval);\n-\t\ti40e_irq_dynamic_enable_icr0(vsi->back);\n+\t\ti40e_irq_dynamic_enable_icr0(vsi->back, false);\n \t}\n \treturn 0;\n }\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c\nindex 1635c7a..3e0d87e 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c\n@@ -1,7 +1,7 @@\n /*******************************************************************************\n *\n * Intel Ethernet Controller XL710 Family Linux Driver\n- * Copyright(c) 2013 - 2015 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@@ -980,7 +980,7 @@ err_alloc:\n \t\ti40e_free_vfs(pf);\n err_iov:\n \t/* Re-enable interrupt 0. */\n-\ti40e_irq_dynamic_enable_icr0(pf);\n+\ti40e_irq_dynamic_enable_icr0(pf, false);\n \treturn ret;\n }\n \ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\nindex 6a0d190..155f2c1 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n@@ -1248,7 +1248,9 @@ static u32 i40e_buildreg_itr(const int type, const u16 itr)\n \tu32 val;\n \n \tval = I40E_VFINT_DYN_CTLN1_INTENA_MASK |\n-\t I40E_VFINT_DYN_CTLN1_CLEARPBA_MASK |\n+\t /* Don't clear PBA because that can cause lost interrupts that\n+\t * came in while we were cleaning/polling\n+\t */\n \t (type << I40E_VFINT_DYN_CTLN1_ITR_INDX_SHIFT) |\n \t (itr << I40E_VFINT_DYN_CTLN1_INTERVAL_SHIFT);\n \n", "prefixes": [ "v2", "next", "S27", "08/15" ] }