get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 481466,
    "url": "http://patchwork.ozlabs.org/api/patches/481466/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1433521234-33355-7-git-send-email-catherine.sullivan@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": "<1433521234-33355-7-git-send-email-catherine.sullivan@intel.com>",
    "list_archive_url": null,
    "date": "2015-06-05T16:20:30",
    "name": "[net-next,S07,06/10] i40e/i40evf: Add support for writeback on ITR feature for X722",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "026fcc9b73178413cacbe4ce7fd01e1371d2e3d9",
    "submitter": {
        "id": 13931,
        "url": "http://patchwork.ozlabs.org/api/people/13931/?format=api",
        "name": "Catherine Sullivan",
        "email": "catherine.sullivan@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/1433521234-33355-7-git-send-email-catherine.sullivan@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/481466/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/481466/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 (fraxinus.osuosl.org [140.211.166.137])\n\tby ozlabs.org (Postfix) with ESMTP id 58A701402A9\n\tfor <incoming@patchwork.ozlabs.org>;\n\tSat,  6 Jun 2015 02:19:33 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id A552FA38F5;\n\tFri,  5 Jun 2015 16:19:32 +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 DJlmvAQUQZKV; Fri,  5 Jun 2015 16:19:30 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id DF70CA38AD;\n\tFri,  5 Jun 2015 16:19:30 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 540FD1C1FC8\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri,  5 Jun 2015 16:19:29 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 4BB3D91820\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri,  5 Jun 2015 16:19:29 +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 DTe5ot8EpvRC for <intel-wired-lan@lists.osuosl.org>;\n\tFri,  5 Jun 2015 16:19:28 +0000 (UTC)",
            "from mga02.intel.com (mga02.intel.com [134.134.136.20])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 30C6D9181B\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tFri,  5 Jun 2015 16:19:28 +0000 (UTC)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n\tby orsmga101.jf.intel.com with ESMTP; 05 Jun 2015 09:18:58 -0700",
            "from catheri1-tigger.jf.intel.com ([134.134.176.92])\n\tby orsmga001.jf.intel.com with ESMTP; 05 Jun 2015 09:18:59 -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-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.13,559,1427785200\"; d=\"scan'208\";a=\"705993656\"",
        "From": "Catherine Sullivan <catherine.sullivan@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Fri,  5 Jun 2015 12:20:30 -0400",
        "Message-Id": "<1433521234-33355-7-git-send-email-catherine.sullivan@intel.com>",
        "X-Mailer": "git-send-email 1.9.3",
        "In-Reply-To": "<1433521234-33355-1-git-send-email-catherine.sullivan@intel.com>",
        "References": "<1433521234-33355-1-git-send-email-catherine.sullivan@intel.com>",
        "Cc": "Anjali Singhai Jain <anjali.singhai@intel.com>",
        "Subject": "[Intel-wired-lan] [intel-wired-lan][net-next PATCH S07 06/10]\n\ti40e/i40evf: Add support for writeback on ITR feature for X722",
        "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\nX722 fixes an issue from X710 where TX descriptor WB would not hapen if\nthe interrupts were disabled. In order for the write backs to happen a\nbit needs to be set in the dynamic interrupt control register called\nWB_ON_ITR. With this feature, the SW driver need not arm SW interrupts to\nwork around the issue in X710.\n\nSigned-off-by: Anjali Singhai Jain <anjali.singhai@intel.com>\nSigned-off-by: Catherine Sullivan <catherine.sullivan@intel.com>\n---\n drivers/net/ethernet/intel/i40e/i40e.h        |  1 +\n drivers/net/ethernet/intel/i40e/i40e_main.c   |  2 ++\n drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 46 +++++++++++++++++++++------\n drivers/net/ethernet/intel/i40e/i40e_txrx.h   |  2 ++\n drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 38 ++++++++++++++++------\n drivers/net/ethernet/intel/i40evf/i40e_txrx.h |  2 ++\n drivers/net/ethernet/intel/i40evf/i40evf.h    |  1 +\n 7 files changed, 74 insertions(+), 18 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e.h b/drivers/net/ethernet/intel/i40e/i40e.h\nindex 756c382..5ef715e 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e.h\n+++ b/drivers/net/ethernet/intel/i40e/i40e.h\n@@ -559,6 +559,7 @@ struct i40e_q_vector {\n \tcpumask_t affinity_mask;\n \tstruct rcu_head rcu;\t/* to avoid race with update stats on free */\n \tchar name[I40E_INT_NAME_STR_LEN];\n+\tbool arm_wb_state;\n } ____cacheline_internodealigned_in_smp;\n \n /* lan device */\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c\nindex 2959fdc..904dddf 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_main.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c\n@@ -7067,6 +7067,8 @@ static int i40e_alloc_rings(struct i40e_vsi *vsi)\n \t\ttx_ring->count = vsi->num_desc;\n \t\ttx_ring->size = 0;\n \t\ttx_ring->dcb_tc = 0;\n+\t\tif (vsi->back->flags & I40E_FLAG_WB_ON_ITR_CAPABLE)\n+\t\t\ttx_ring->flags = I40E_TXR_FLAGS_WB_ON_ITR;\n \t\tvsi->tx_rings[i] = tx_ring;\n \n \t\trx_ring = &tx_ring[1];\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\nindex d0339b6..c3aae08 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c\n@@ -853,15 +853,40 @@ static bool i40e_clean_tx_irq(struct i40e_ring *tx_ring, int budget)\n  **/\n static void i40e_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n {\n-\tu32 val = I40E_PFINT_DYN_CTLN_INTENA_MASK |\n-\t\t  I40E_PFINT_DYN_CTLN_ITR_INDX_MASK | /* set noitr */\n-\t\t  I40E_PFINT_DYN_CTLN_SWINT_TRIG_MASK |\n-\t\t  I40E_PFINT_DYN_CTLN_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_PFINT_DYN_CTLN(q_vector->v_idx + vsi->base_vector - 1),\n-\t     val);\n+\tu16 flags = q_vector->tx.ring[0].flags;\n+\n+\tif (flags & I40E_TXR_FLAGS_WB_ON_ITR) {\n+\t\tu32 val;\n+\n+\t\tif (q_vector->arm_wb_state)\n+\t\t\treturn;\n+\n+\t\tval = I40E_PFINT_DYN_CTLN_WB_ON_ITR_MASK;\n+\n+\t\twr32(&vsi->back->hw,\n+\t\t     I40E_PFINT_DYN_CTLN(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 if (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+\t\t\t  I40E_PFINT_DYN_CTLN_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_PFINT_DYN_CTLN(q_vector->v_idx +\n+\t\t\t\t\t vsi->base_vector - 1), val);\n+\t} else {\n+\t\tu32 val = I40E_PFINT_DYN_CTL0_INTENA_MASK |\n+\t\t\t  I40E_PFINT_DYN_CTL0_ITR_INDX_MASK | /* set noitr */\n+\t\t\t  I40E_PFINT_DYN_CTL0_SWINT_TRIG_MASK |\n+\t\t\t  I40E_PFINT_DYN_CTL0_SW_ITR_INDX_ENA_MASK;\n+\t\t\t/* allow 00 to be written to the index */\n+\n+\t\twr32(&vsi->back->hw, I40E_PFINT_DYN_CTL0, val);\n+\t}\n }\n \n /**\n@@ -1918,6 +1943,9 @@ int i40e_napi_poll(struct napi_struct *napi, int budget)\n \t\treturn budget;\n \t}\n \n+\tif (vsi->back->flags & I40E_TXR_FLAGS_WB_ON_ITR)\n+\t\tq_vector->arm_wb_state = false;\n+\n \t/* Work is done so exit the polling mode and re-enable the interrupt */\n \tnapi_complete(napi);\n \tif (vsi->back->flags & I40E_FLAG_MSIX_ENABLED) {\ndiff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.h b/drivers/net/ethernet/intel/i40e/i40e_txrx.h\nindex 8b618d0..0e40994 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.h\n@@ -265,6 +265,8 @@ struct i40e_ring {\n \tbool ring_active;\t\t/* is ring online or not */\n \tbool arm_wb;\t\t/* do something to arm write back */\n \n+\tu16 flags;\n+#define I40E_TXR_FLAGS_WB_ON_ITR\tBIT(0)\n \t/* stats structs */\n \tstruct i40e_queue_stats\tstats;\n \tstruct u64_stats_sync syncp;\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\nindex 4649d45..9683baf 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c\n@@ -366,15 +366,32 @@ static bool i40e_clean_tx_irq(struct i40e_ring *tx_ring, int budget)\n  **/\n static void i40e_force_wb(struct i40e_vsi *vsi, struct i40e_q_vector *q_vector)\n {\n-\tu32 val = I40E_VFINT_DYN_CTLN_INTENA_MASK |\n-\t\t  I40E_VFINT_DYN_CTLN1_ITR_INDX_MASK | /* set noitr */\n-\t\t  I40E_VFINT_DYN_CTLN_SWINT_TRIG_MASK |\n-\t\t  I40E_VFINT_DYN_CTLN_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+\tu16 flags = q_vector->tx.ring[0].flags;\n+\n+\tif (flags & I40E_TXR_FLAGS_WB_ON_ITR) {\n+\t\tu32 val;\n+\n+\t\tif (q_vector->arm_wb_state)\n+\t\t\treturn;\n+\n+\t\tval = I40E_VFINT_DYN_CTLN1_WB_ON_ITR_MASK;\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 }\n \n /**\n@@ -1368,6 +1385,9 @@ int i40evf_napi_poll(struct napi_struct *napi, int budget)\n \t\treturn budget;\n \t}\n \n+\tif (vsi->back->flags & I40E_TXR_FLAGS_WB_ON_ITR)\n+\t\tq_vector->arm_wb_state = false;\n+\n \t/* Work is done so exit the polling mode and re-enable the interrupt */\n \tnapi_complete(napi);\n \ti40e_update_enable_itr(vsi, q_vector);\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\nindex b2f9b82..17bb59d 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n+++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.h\n@@ -262,6 +262,8 @@ struct i40e_ring {\n \tbool ring_active;\t\t/* is ring online or not */\n \tbool arm_wb;\t\t/* do something to arm write back */\n \n+\tu16 flags;\n+#define I40E_TXR_FLAGS_WB_ON_ITR\tBIT(0)\n \t/* stats structs */\n \tstruct i40e_queue_stats\tstats;\n \tstruct u64_stats_sync syncp;\ndiff --git a/drivers/net/ethernet/intel/i40evf/i40evf.h b/drivers/net/ethernet/intel/i40evf/i40evf.h\nindex ef7a86d..6df20eab 100644\n--- a/drivers/net/ethernet/intel/i40evf/i40evf.h\n+++ b/drivers/net/ethernet/intel/i40evf/i40evf.h\n@@ -117,6 +117,7 @@ struct i40e_q_vector {\n \tu8 num_ringpairs;\t/* total number of ring pairs in vector */\n \tint v_idx;\t  /* vector index in list */\n \tchar name[IFNAMSIZ + 9];\n+\tbool arm_wb_state;\n \tcpumask_var_t affinity_mask;\n };\n \n",
    "prefixes": [
        "net-next",
        "S07",
        "06/10"
    ]
}