get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 611849,
    "url": "http://patchwork.ozlabs.org/api/patches/611849/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1461004429-34316-10-git-send-email-jesse.brandeburg@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": "<1461004429-34316-10-git-send-email-jesse.brandeburg@intel.com>",
    "list_archive_url": null,
    "date": "2016-04-18T18:33:49",
    "name": "[next,S35,v3,9/9] i40e: Test memory before ethtool alloc succeeds",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "90621415dae6449fc7407ceb0fb00bd97933306d",
    "submitter": {
        "id": 189,
        "url": "http://patchwork.ozlabs.org/api/people/189/?format=api",
        "name": "Jesse Brandeburg",
        "email": "jesse.brandeburg@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/1461004429-34316-10-git-send-email-jesse.brandeburg@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/611849/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/611849/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 3qpcJ56Y82z9t60\n\tfor <incoming@patchwork.ozlabs.org>;\n\tTue, 19 Apr 2016 04:34:45 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 38CEB86C9D;\n\tMon, 18 Apr 2016 18:34:45 +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 0ykWUZXJ8AGr; Mon, 18 Apr 2016 18:34:44 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 122568581D;\n\tMon, 18 Apr 2016 18:34:44 +0000 (UTC)",
            "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\tby ash.osuosl.org (Postfix) with ESMTP id 92B431C2080\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 18 Apr 2016 18:34:42 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 8E6A1857D2\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 18 Apr 2016 18:34:42 +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 ADOPKDJqp2Qi for <intel-wired-lan@lists.osuosl.org>;\n\tMon, 18 Apr 2016 18:34:42 +0000 (UTC)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id E4FA685771\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tMon, 18 Apr 2016 18:34:41 +0000 (UTC)",
            "from fmsmga002.fm.intel.com ([10.253.24.26])\n\tby orsmga102.jf.intel.com with ESMTP; 18 Apr 2016 11:34:41 -0700",
            "from jbrandeb-hsm2.jf.intel.com ([134.134.3.81])\n\tby fmsmga002.fm.intel.com with ESMTP; 18 Apr 2016 11:34:41 -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.24,503,1455004800\"; d=\"scan'208\";a=\"961329968\"",
        "From": "Jesse Brandeburg <jesse.brandeburg@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Mon, 18 Apr 2016 11:33:49 -0700",
        "Message-Id": "<1461004429-34316-10-git-send-email-jesse.brandeburg@intel.com>",
        "X-Mailer": "git-send-email 2.1.0",
        "In-Reply-To": "<1461004429-34316-9-git-send-email-jesse.brandeburg@intel.com>",
        "References": "<1461004429-34316-1-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-2-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-3-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-4-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-5-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-6-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-7-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-8-git-send-email-jesse.brandeburg@intel.com>\n\t<1461004429-34316-9-git-send-email-jesse.brandeburg@intel.com>",
        "Subject": "[Intel-wired-lan] [PATCH next S35 v3 9/9] i40e: Test memory before\n\tethtool alloc succeeds",
        "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": "When testing on systems with very limited amounts of RAM, a bug was\nfound where, while changing the number of descriptors using ethtool,\nthe driver didn't test the limits of system memory before permanently\nassuming it would be able to get receive buffer memory.\n\nWork around this issue by pre-allocation of the receive buffer\nmemory, in the \"ghost\" ring, which is then used during reinit\nusing the new ring length.\n\nSigned-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>\nChange-Id: I92d7a5fb59a6c884b2efdd1ec652845f101c3359\n---\n drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 34 +++++++++++++++++++++++---\n 1 file changed, 31 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\nindex 36aa186..0a5374e 100644\n--- a/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n+++ b/drivers/net/ethernet/intel/i40e/i40e_ethtool.c\n@@ -1274,6 +1274,13 @@ static int i40e_set_ringparam(struct net_device *netdev,\n \t\t}\n \n \t\tfor (i = 0; i < vsi->num_queue_pairs; i++) {\n+\t\t\t/* this is to allow wr32 to have something to write to\n+\t\t\t * during early allocation of rx buffers\n+\t\t\t */\n+\t\t\tu32 __iomem faketail = 0;\n+\t\t\tstruct i40e_ring *ring;\n+\t\t\tu16 unused;\n+\n \t\t\t/* clone ring and setup updated count */\n \t\t\trx_rings[i] = *vsi->rx_rings[i];\n \t\t\trx_rings[i].count = new_rx_count;\n@@ -1282,12 +1289,22 @@ static int i40e_set_ringparam(struct net_device *netdev,\n \t\t\t */\n \t\t\trx_rings[i].desc = NULL;\n \t\t\trx_rings[i].rx_bi = NULL;\n+\t\t\trx_rings[i].tail = (u8 __iomem *)&faketail;\n \t\t\terr = i40e_setup_rx_descriptors(&rx_rings[i]);\n+\t\t\tif (err)\n+\t\t\t\tgoto rx_unwind;\n+\n+\t\t\t/* now allocate the rx buffers to make sure the OS\n+\t\t\t * has enough memory, any failure here means abort\n+\t\t\t */\n+\t\t\tring = &rx_rings[i];\n+\t\t\tunused = I40E_DESC_UNUSED(ring);\n+\t\t\terr = i40e_alloc_rx_buffers(ring, unused);\n+rx_unwind:\n \t\t\tif (err) {\n-\t\t\t\twhile (i) {\n-\t\t\t\t\ti--;\n+\t\t\t\tdo {\n \t\t\t\t\ti40e_free_rx_resources(&rx_rings[i]);\n-\t\t\t\t}\n+\t\t\t\t} while (i--);\n \t\t\t\tkfree(rx_rings);\n \t\t\t\trx_rings = NULL;\n \n@@ -1313,6 +1330,17 @@ static int i40e_set_ringparam(struct net_device *netdev,\n \tif (rx_rings) {\n \t\tfor (i = 0; i < vsi->num_queue_pairs; i++) {\n \t\t\ti40e_free_rx_resources(vsi->rx_rings[i]);\n+\t\t\t/* get the real tail offset */\n+\t\t\trx_rings[i].tail = vsi->rx_rings[i]->tail;\n+\t\t\t/* this is to fake out the allocation routine\n+\t\t\t * into thinking it has to realloc everything\n+\t\t\t * but the recycling logic will let us re-use\n+\t\t\t * the buffers allocated above\n+\t\t\t */\n+\t\t\trx_rings[i].next_to_use = 0;\n+\t\t\trx_rings[i].next_to_clean = 0;\n+\t\t\trx_rings[i].next_to_alloc = 0;\n+\t\t\t/* do a struct copy */\n \t\t\t*vsi->rx_rings[i] = rx_rings[i];\n \t\t}\n \t\tkfree(rx_rings);\n",
    "prefixes": [
        "next",
        "S35",
        "v3",
        "9/9"
    ]
}