get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 1086445,
    "url": "http://patchwork.ozlabs.org/api/patches/1086445/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20190416172128.27184-8-anirudh.venkataramanan@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": "<20190416172128.27184-8-anirudh.venkataramanan@intel.com>",
    "list_archive_url": null,
    "date": "2019-04-16T17:21:20",
    "name": "[S18,07/15] ice: Refactor getting/setting coalesce",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "a88c0b0212866ba63cc39a01ba231028ba242acb",
    "submitter": {
        "id": 73601,
        "url": "http://patchwork.ozlabs.org/api/people/73601/?format=api",
        "name": "Anirudh Venkataramanan",
        "email": "anirudh.venkataramanan@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/20190416172128.27184-8-anirudh.venkataramanan@intel.com/mbox/",
    "series": [
        {
            "id": 103105,
            "url": "http://patchwork.ozlabs.org/api/series/103105/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=103105",
            "date": "2019-04-16T17:21:13",
            "name": "Fixes and feature updates for ice",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/103105/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/1086445/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/1086445/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<intel-wired-lan-bounces@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"
        ],
        "Authentication-Results": [
            "ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=osuosl.org\n\t(client-ip=140.211.166.137; helo=fraxinus.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org;\n\tdmarc=fail (p=none dis=none) header.from=intel.com"
        ],
        "Received": [
            "from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 44kBxx3gMwz9s55\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 17 Apr 2019 03:22:13 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 0F35485F35;\n\tTue, 16 Apr 2019 17:22:12 +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 ZqFaGGEGw8zV; Tue, 16 Apr 2019 17:22:10 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby fraxinus.osuosl.org (Postfix) with ESMTP id 1677385F18;\n\tTue, 16 Apr 2019 17:22:10 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id 29DAA1BF28D\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 16 Apr 2019 17:22:06 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 2728486DFF\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 16 Apr 2019 17:22:06 +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 Jslp2EuKJV8Z for <intel-wired-lan@lists.osuosl.org>;\n\tTue, 16 Apr 2019 17:22:03 +0000 (UTC)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 5B63A870A2\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 16 Apr 2019 17:22:02 +0000 (UTC)",
            "from fmsmga006.fm.intel.com ([10.253.24.20])\n\tby fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t16 Apr 2019 10:22:02 -0700",
            "from shasta.jf.intel.com ([10.166.244.191])\n\tby fmsmga006.fm.intel.com with ESMTP; 16 Apr 2019 10:22:02 -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-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.60,358,1549958400\"; d=\"scan'208\";a=\"338040569\"",
        "From": "Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>",
        "To": "intel-wired-lan@lists.osuosl.org",
        "Date": "Tue, 16 Apr 2019 10:21:20 -0700",
        "Message-Id": "<20190416172128.27184-8-anirudh.venkataramanan@intel.com>",
        "X-Mailer": "git-send-email 2.20.1",
        "In-Reply-To": "<20190416172128.27184-1-anirudh.venkataramanan@intel.com>",
        "References": "<20190416172128.27184-1-anirudh.venkataramanan@intel.com>",
        "MIME-Version": "1.0",
        "Subject": "[Intel-wired-lan] [PATCH S18 07/15] ice: Refactor getting/setting\n\tcoalesce",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "Intel Wired Ethernet Linux Kernel Driver Development\n\t<intel-wired-lan.osuosl.org>",
        "List-Unsubscribe": "<https://lists.osuosl.org/mailman/options/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=unsubscribe>",
        "List-Archive": "<http://lists.osuosl.org/pipermail/intel-wired-lan/>",
        "List-Post": "<mailto:intel-wired-lan@osuosl.org>",
        "List-Help": "<mailto:intel-wired-lan-request@osuosl.org?subject=help>",
        "List-Subscribe": "<https://lists.osuosl.org/mailman/listinfo/intel-wired-lan>, \n\t<mailto:intel-wired-lan-request@osuosl.org?subject=subscribe>",
        "Content-Type": "text/plain; charset=\"us-ascii\"",
        "Content-Transfer-Encoding": "7bit",
        "Errors-To": "intel-wired-lan-bounces@osuosl.org",
        "Sender": "\"Intel-wired-lan\" <intel-wired-lan-bounces@osuosl.org>"
    },
    "content": "From: Brett Creeley <brett.creeley@intel.com>\n\nCurrently if the driver has an uneven amount of Rx/Tx queues\nsetting the coalesce settings through ethtool will result in\nan error. This is happening because in the setting coalesce\nflow we are reporting an error if either Rx or Tx fails.\n\nAlso, the flow for setting/getting per_q_coalesce and\nsetting/getting coalesce settings for the entire device\nis different.\n\nFix these issues by adding one function, ice_set_q_coalesce(),\nand another, ice_get_q_coalesce(), that both getting/setting\nper_q and entire device coalesce can use. This makes handling\nthe error cases generic between the two flows and simplifies\n__ice_set_coalesce() and __ice_get_coalesce().\n\nAlso, add a header comment to __ice_set_coalesce().\n\nSigned-off-by: Brett Creeley <brett.creeley@intel.com>\nSigned-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com>\n---\n[Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> cleaned up commit message]\n---\n drivers/net/ethernet/intel/ice/ice_ethtool.c | 152 ++++++++++++-------\n 1 file changed, 93 insertions(+), 59 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/ice/ice_ethtool.c b/drivers/net/ethernet/intel/ice/ice_ethtool.c\nindex 0bfe696d8077..08ec2f3c5977 100644\n--- a/drivers/net/ethernet/intel/ice/ice_ethtool.c\n+++ b/drivers/net/ethernet/intel/ice/ice_ethtool.c\n@@ -2254,50 +2254,61 @@ ice_get_rc_coalesce(struct ethtool_coalesce *ec, enum ice_container_type c_type,\n \treturn 0;\n }\n \n+/**\n+ * ice_get_q_coalesce - get a queue's ITR/INTRL (coalesce) settings\n+ * @vsi: VSI associated to the queue for getting ITR/INTRL (coalesce) settings\n+ * @ec: coalesce settings to program the device with\n+ * @q_num: update ITR/INTRL (coalesce) settings for this queue number/index\n+ *\n+ * Return 0 on success, and negative under the following conditions:\n+ * 1. Getting Tx or Rx ITR/INTRL (coalesce) settings failed.\n+ * 2. The q_num passed in is not a valid number/index for Tx and Rx rings.\n+ */\n+static int\n+ice_get_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num)\n+{\n+\tif (q_num < vsi->num_rxq && q_num < vsi->num_txq) {\n+\t\tif (ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,\n+\t\t\t\t\t&vsi->rx_rings[q_num]->q_vector->rx))\n+\t\t\treturn -EINVAL;\n+\t\tif (ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,\n+\t\t\t\t\t&vsi->tx_rings[q_num]->q_vector->tx))\n+\t\t\treturn -EINVAL;\n+\t} else if (q_num < vsi->num_rxq) {\n+\t\tif (ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,\n+\t\t\t\t\t&vsi->rx_rings[q_num]->q_vector->rx))\n+\t\t\treturn -EINVAL;\n+\t} else if (q_num < vsi->num_txq) {\n+\t\tif (ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,\n+\t\t\t\t\t&vsi->tx_rings[q_num]->q_vector->tx))\n+\t\t\treturn -EINVAL;\n+\t} else {\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn 0;\n+}\n+\n /**\n  * __ice_get_coalesce - get ITR/INTRL values for the device\n  * @netdev: pointer to the netdev associated with this query\n  * @ec: ethtool structure to fill with driver's coalesce settings\n  * @q_num: queue number to get the coalesce settings for\n+ *\n+ * If the caller passes in a negative q_num then we return coalesce settings\n+ * based on queue number 0, else use the actual q_num passed in.\n  */\n static int\n __ice_get_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec,\n \t\t   int q_num)\n {\n \tstruct ice_netdev_priv *np = netdev_priv(netdev);\n-\tint tx = -EINVAL, rx = -EINVAL;\n \tstruct ice_vsi *vsi = np->vsi;\n \n-\tif (q_num < 0) {\n-\t\trx = ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,\n-\t\t\t\t\t &vsi->rx_rings[0]->q_vector->rx);\n-\t\ttx = ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,\n-\t\t\t\t\t &vsi->tx_rings[0]->q_vector->tx);\n-\n-\t\tgoto update_coalesced_frames;\n-\t}\n-\n-\tif (q_num < vsi->num_rxq && q_num < vsi->num_txq) {\n-\t\trx = ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,\n-\t\t\t\t\t &vsi->rx_rings[q_num]->q_vector->rx);\n-\t\ttx = ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,\n-\t\t\t\t\t &vsi->tx_rings[q_num]->q_vector->tx);\n-\t} else if (q_num < vsi->num_rxq) {\n-\t\trx = ice_get_rc_coalesce(ec, ICE_RX_CONTAINER,\n-\t\t\t\t\t &vsi->rx_rings[q_num]->q_vector->rx);\n-\t} else if (q_num < vsi->num_txq) {\n-\t\ttx = ice_get_rc_coalesce(ec, ICE_TX_CONTAINER,\n-\t\t\t\t\t &vsi->tx_rings[q_num]->q_vector->tx);\n-\t} else {\n-\t\t/* q_num is invalid for both Rx and Tx queues */\n-\t\treturn -EINVAL;\n-\t}\n+\tif (q_num < 0)\n+\t\tq_num = 0;\n \n-update_coalesced_frames:\n-\t/* either q_num is invalid for both Rx and Tx queues or setting coalesce\n-\t * failed completely\n-\t */\n-\tif (tx && rx)\n+\tif (ice_get_q_coalesce(vsi, ec, q_num))\n \t\treturn -EINVAL;\n \n \tif (q_num < vsi->num_txq)\n@@ -2423,54 +2434,77 @@ ice_set_rc_coalesce(enum ice_container_type c_type, struct ethtool_coalesce *ec,\n \treturn 0;\n }\n \n+/**\n+ * ice_set_q_coalesce - set a queue's ITR/INTRL (coalesce) settings\n+ * @vsi: VSI associated to the queue that need updating\n+ * @ec: coalesce settings to program the device with\n+ * @q_num: update ITR/INTRL (coalesce) settings for this queue number/index\n+ *\n+ * Return 0 on success, and negative under the following conditions:\n+ * 1. Setting Tx or Rx ITR/INTRL (coalesce) settings failed.\n+ * 2. The q_num passed in is not a valid number/index for Tx and Rx rings.\n+ */\n+static int\n+ice_set_q_coalesce(struct ice_vsi *vsi, struct ethtool_coalesce *ec, int q_num)\n+{\n+\tif (q_num < vsi->num_rxq && q_num < vsi->num_txq) {\n+\t\tif (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,\n+\t\t\t\t\t&vsi->rx_rings[q_num]->q_vector->rx,\n+\t\t\t\t\tvsi))\n+\t\t\treturn -EINVAL;\n+\n+\t\tif (ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,\n+\t\t\t\t\t&vsi->tx_rings[q_num]->q_vector->tx,\n+\t\t\t\t\tvsi))\n+\t\t\treturn -EINVAL;\n+\t} else if (q_num < vsi->num_rxq) {\n+\t\tif (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,\n+\t\t\t\t\t&vsi->rx_rings[q_num]->q_vector->rx,\n+\t\t\t\t\tvsi))\n+\t\t\treturn -EINVAL;\n+\t} else if (q_num < vsi->num_txq) {\n+\t\tif (ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,\n+\t\t\t\t\t&vsi->tx_rings[q_num]->q_vector->tx,\n+\t\t\t\t\tvsi))\n+\t\t\treturn -EINVAL;\n+\t} else {\n+\t\treturn -EINVAL;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * __ice_set_coalesce - set ITR/INTRL values for the device\n+ * @netdev: pointer to the netdev associated with this query\n+ * @ec: ethtool structure to fill with driver's coalesce settings\n+ * @q_num: queue number to get the coalesce settings for\n+ *\n+ * If the caller passes in a negative q_num then we set the coalesce settings\n+ * for all Tx/Rx queues, else use the actual q_num passed in.\n+ */\n static int\n __ice_set_coalesce(struct net_device *netdev, struct ethtool_coalesce *ec,\n \t\t   int q_num)\n {\n \tstruct ice_netdev_priv *np = netdev_priv(netdev);\n-\tint rx = -EINVAL, tx = -EINVAL;\n \tstruct ice_vsi *vsi = np->vsi;\n \n \tif (q_num < 0) {\n \t\tint i;\n \n \t\tice_for_each_q_vector(vsi, i) {\n-\t\t\tstruct ice_q_vector *q_vector = vsi->q_vectors[i];\n-\n-\t\t\tif (ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,\n-\t\t\t\t\t\t&q_vector->rx, vsi) ||\n-\t\t\t    ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,\n-\t\t\t\t\t\t&q_vector->tx, vsi))\n+\t\t\tif (ice_set_q_coalesce(vsi, ec, i))\n \t\t\t\treturn -EINVAL;\n \t\t}\n-\n \t\tgoto set_work_lmt;\n \t}\n \n-\tif (q_num < vsi->num_rxq && q_num < vsi->num_txq) {\n-\t\trx = ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,\n-\t\t\t\t\t &vsi->rx_rings[q_num]->q_vector->rx,\n-\t\t\t\t\t vsi);\n-\t\ttx = ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,\n-\t\t\t\t\t &vsi->tx_rings[q_num]->q_vector->tx,\n-\t\t\t\t\t vsi);\n-\t} else if (q_num < vsi->num_rxq) {\n-\t\trx = ice_set_rc_coalesce(ICE_RX_CONTAINER, ec,\n-\t\t\t\t\t &vsi->rx_rings[q_num]->q_vector->rx,\n-\t\t\t\t\t vsi);\n-\t} else if (q_num < vsi->num_txq) {\n-\t\ttx  = ice_set_rc_coalesce(ICE_TX_CONTAINER, ec,\n-\t\t\t\t\t  &vsi->tx_rings[q_num]->q_vector->tx,\n-\t\t\t\t\t  vsi);\n-\t}\n-\n-\t/* either q_num is invalid for both Rx and Tx queues or setting coalesce\n-\t * failed completely\n-\t */\n-\tif (rx && tx)\n+\tif (ice_set_q_coalesce(vsi, ec, q_num))\n \t\treturn -EINVAL;\n \n set_work_lmt:\n+\n \tif (ec->tx_max_coalesced_frames_irq || ec->rx_max_coalesced_frames_irq)\n \t\tvsi->work_lmt = max(ec->tx_max_coalesced_frames_irq,\n \t\t\t\t    ec->rx_max_coalesced_frames_irq);\n",
    "prefixes": [
        "S18",
        "07/15"
    ]
}