get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 566213,
    "url": "http://patchwork.ozlabs.org/api/patches/566213/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1452554307-20937-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": "<1452554307-20937-9-git-send-email-joshua.a.hay@intel.com>",
    "list_archive_url": null,
    "date": "2016-01-11T23:18:20",
    "name": "[next,S27,08/15] i40e/i40evf: don't lose interrupts",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "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/1452554307-20937-9-git-send-email-joshua.a.hay@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/566213/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/566213/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 031F51402F0\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 12 Jan 2016 10:18:40 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 562D289FC0;\n\tMon, 11 Jan 2016 23:18:40 +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 C_iOc3JJN9QW; Mon, 11 Jan 2016 23:18:37 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 6D7378A002;\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 925071C102A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 11 Jan 2016 23:18:33 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id DAC498AA15\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 wGS1mPLC0O37 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 900D38AA59\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:30 -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=\"888496215\"",
        "From": "Joshua Hay <joshua.a.hay@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Mon, 11 Jan 2016 15:18:20 -0800",
        "Message-Id": "<1452554307-20937-9-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 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 cffa834..e13a179 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@@ -766,6 +766,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@@ -774,7 +777,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 25cf075..f28a999 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_main.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c\n@@ -3262,14 +3262,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@@ -3401,7 +3402,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@@ -3547,7 +3548,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@@ -7855,7 +7856,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 a01192a..c2f0b7c 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": [
        "next",
        "S27",
        "08/15"
    ]
}