get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 591167,
    "url": "http://patchwork.ozlabs.org/api/patches/591167/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1456963402-12908-1-git-send-email-jacob.e.keller@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": "<1456963402-12908-1-git-send-email-jacob.e.keller@intel.com>",
    "list_archive_url": null,
    "date": "2016-03-03T00:03:22",
    "name": "[v5] fm10k: cleanup fm10k stats and remove debug-statistics",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "45f223ebcbb58b704f5625fe721ec4d4dc110245",
    "submitter": {
        "id": 9784,
        "url": "http://patchwork.ozlabs.org/api/people/9784/?format=api",
        "name": "Jacob Keller",
        "email": "jacob.e.keller@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/1456963402-12908-1-git-send-email-jacob.e.keller@intel.com/mbox/",
    "series": [],
    "comments": "http://patchwork.ozlabs.org/api/patches/591167/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/591167/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 silver.osuosl.org (smtp3.osuosl.org [140.211.166.136])\n\tby ozlabs.org (Postfix) with ESMTP id 15E89140D8C\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  3 Mar 2016 11:03:33 +1100 (AEDT)",
            "from localhost (localhost [127.0.0.1])\n\tby silver.osuosl.org (Postfix) with ESMTP id F045231219;\n\tThu,  3 Mar 2016 00:03:32 +0000 (UTC)",
            "from silver.osuosl.org ([127.0.0.1])\n\tby localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024)\n\twith ESMTP id V2m3RWZDhmIg; Thu,  3 Mar 2016 00:03:27 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby silver.osuosl.org (Postfix) with ESMTP id 2217933CA5;\n\tThu,  3 Mar 2016 00:03:27 +0000 (UTC)",
            "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 180831CF3DD\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  3 Mar 2016 00:03:26 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 133D295C81\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  3 Mar 2016 00:03:26 +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 XAPn1lrw4cZL for <intel-wired-lan@lists.osuosl.org>;\n\tThu,  3 Mar 2016 00:03:24 +0000 (UTC)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 740CE95C7A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tThu,  3 Mar 2016 00:03:24 +0000 (UTC)",
            "from orsmga003.jf.intel.com ([10.7.209.27])\n\tby orsmga102.jf.intel.com with ESMTP; 02 Mar 2016 16:03:25 -0800",
            "from jekeller-desk.amr.corp.intel.com (HELO\n\tjekeller-desk.jekeller.internal) ([134.134.3.65])\n\tby orsmga003.jf.intel.com with ESMTP; 02 Mar 2016 16:03:25 -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,531,1449561600\"; d=\"scan'208\";a=\"757055423\"",
        "From": "Jacob Keller <jacob.e.keller@intel.com>",
        "To": "Intel Wired LAN <intel-wired-lan@lists.osuosl.org>",
        "Date": "Wed,  2 Mar 2016 16:03:22 -0800",
        "Message-Id": "<1456963402-12908-1-git-send-email-jacob.e.keller@intel.com>",
        "X-Mailer": "git-send-email 2.7.1.429.g45cd78e",
        "Subject": "[Intel-wired-lan] [PATCH v5] fm10k: cleanup fm10k stats and remove\n\tdebug-statistics",
        "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": "This change fixes up subtle issues with the current fm10k ethtool stats.\nPrimarily, support of debug-statistics and per-queue length statistics\nis not something the current API can handle. Due to the way that ethtool\nworks, the number of statistics needs to be static for the life time of\na given device. Our use of debug-statistics does not really allow for\nthis, so this patch drops its use.\n\nFinish this cleanup by reworking the per-queue stats to use the new\nhelper functions which reduce the duplicate and error prone code.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\nSorry for the thrash. Here's the correct version with things cleaned up.\nIt replaces the noted commit below in Jeff's queue. Should be a clean\nswap.\n\nNotes:\n    - v5\n    * resend fixes conflicts\n    * rework of 0702f0cb58bd (\"fm10k: use fm10k_stats structures for per-queue statistics\")\n      this should replace that patch in the queue. description and title had to\n      change to match patch contents\n\n drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c | 127 ++++++-----------------\n 1 file changed, 33 insertions(+), 94 deletions(-)",
    "diff": "diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c b/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c\nindex c67121cc7b23..673b2167f5f8 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k_ethtool.c\n@@ -81,17 +81,6 @@ static const struct fm10k_stats fm10k_gstrings_global_stats[] = {\n \tFM10K_STAT(\"tx_hwtstamp_timeouts\", tx_hwtstamp_timeouts),\n };\n \n-static const struct fm10k_stats fm10k_gstrings_debug_stats[] = {\n-\tFM10K_STAT(\"hw_sm_mbx_full\", hw_sm_mbx_full),\n-\tFM10K_STAT(\"hw_csum_tx_good\", hw_csum_tx_good),\n-\tFM10K_STAT(\"hw_csum_rx_good\", hw_csum_rx_good),\n-\tFM10K_STAT(\"rx_switch_errors\", rx_switch_errors),\n-\tFM10K_STAT(\"rx_drops\", rx_drops),\n-\tFM10K_STAT(\"rx_pp_errors\", rx_pp_errors),\n-\tFM10K_STAT(\"rx_link_errors\", rx_link_errors),\n-\tFM10K_STAT(\"rx_length_errors\", rx_length_errors),\n-};\n-\n static const struct fm10k_stats fm10k_gstrings_pf_stats[] = {\n \tFM10K_STAT(\"timeout\", stats.timeout.count),\n \tFM10K_STAT(\"ur\", stats.ur.count),\n@@ -121,18 +110,27 @@ static const struct fm10k_stats fm10k_gstrings_mbx_stats[] = {\n \tFM10K_MBX_STAT(\"mbx_rx_mbmem_pushed\", rx_mbmem_pushed),\n };\n \n+#define FM10K_QUEUE_STAT(_name, _stat) { \\\n+\t.stat_string = _name, \\\n+\t.sizeof_stat = FIELD_SIZEOF(struct fm10k_ring, _stat), \\\n+\t.stat_offset = offsetof(struct fm10k_ring, _stat) \\\n+}\n+\n+static const struct fm10k_stats fm10k_gstrings_queue_stats[] = {\n+\tFM10K_QUEUE_STAT(\"packets\", stats.packets),\n+\tFM10K_QUEUE_STAT(\"bytes\", stats.packets),\n+};\n+\n #define FM10K_GLOBAL_STATS_LEN ARRAY_SIZE(fm10k_gstrings_global_stats)\n-#define FM10K_DEBUG_STATS_LEN ARRAY_SIZE(fm10k_gstrings_debug_stats)\n #define FM10K_PF_STATS_LEN ARRAY_SIZE(fm10k_gstrings_pf_stats)\n #define FM10K_MBX_STATS_LEN ARRAY_SIZE(fm10k_gstrings_mbx_stats)\n-\n-#define FM10K_QUEUE_STATS_LEN(_n) \\\n-\t((_n) * 2 * (sizeof(struct fm10k_queue_stats) / sizeof(u64)))\n+#define FM10K_QUEUE_STATS_LEN ARRAY_SIZE(fm10k_gstrings_queue_stats)\n \n #define FM10K_STATIC_STATS_LEN (FM10K_GLOBAL_STATS_LEN + \\\n \t\t\t\tFM10K_NETDEV_STATS_LEN + \\\n \t\t\t\tFM10K_MBX_STATS_LEN)\n \n+\n static const char fm10k_gstrings_test[][ETH_GSTRING_LEN] = {\n \t\"Mailbox test (on/offline)\"\n };\n@@ -145,12 +143,10 @@ enum fm10k_self_test_types {\n };\n \n enum {\n-\tFM10K_PRV_FLAG_DEBUG_STATS,\n \tFM10K_PRV_FLAG_LEN,\n };\n \n static const char fm10k_prv_flags[FM10K_PRV_FLAG_LEN][ETH_GSTRING_LEN] = {\n-\t\"debug-statistics\",\n };\n \n static void fm10k_add_stat_strings(char **p, const char *prefix,\n@@ -169,7 +165,6 @@ static void fm10k_add_stat_strings(char **p, const char *prefix,\n static void fm10k_get_stat_strings(struct net_device *dev, u8 *data)\n {\n \tstruct fm10k_intfc *interface = netdev_priv(dev);\n-\tstruct fm10k_iov_data *iov_data = interface->iov_data;\n \tchar *p = (char *)data;\n \tunsigned int i;\n \n@@ -179,10 +174,6 @@ static void fm10k_get_stat_strings(struct net_device *dev, u8 *data)\n \tfm10k_add_stat_strings(&p, \"\", fm10k_gstrings_global_stats,\n \t\t\t       FM10K_GLOBAL_STATS_LEN);\n \n-\tif (interface->flags & FM10K_FLAG_DEBUG_STATS)\n-\t\tfm10k_add_stat_strings(&p, \"\", fm10k_gstrings_debug_stats,\n-\t\t\t\t       FM10K_DEBUG_STATS_LEN);\n-\n \tfm10k_add_stat_strings(&p, \"\", fm10k_gstrings_mbx_stats,\n \t\t\t       FM10K_MBX_STATS_LEN);\n \n@@ -190,26 +181,18 @@ static void fm10k_get_stat_strings(struct net_device *dev, u8 *data)\n \t\tfm10k_add_stat_strings(&p, \"\", fm10k_gstrings_pf_stats,\n \t\t\t\t       FM10K_PF_STATS_LEN);\n \n-\tif ((interface->flags & FM10K_FLAG_DEBUG_STATS) && iov_data) {\n-\t\tfor (i = 0; i < iov_data->num_vfs; i++) {\n-\t\t\tchar prefix[ETH_GSTRING_LEN];\n-\n-\t\t\tsnprintf(prefix, ETH_GSTRING_LEN, \"vf_%u_\", i);\n-\t\t\tfm10k_add_stat_strings(&p, prefix,\n-\t\t\t\t\t       fm10k_gstrings_mbx_stats,\n-\t\t\t\t\t       FM10K_MBX_STATS_LEN);\n-\t\t}\n-\t}\n-\n \tfor (i = 0; i < interface->hw.mac.max_queues; i++) {\n-\t\tsnprintf(p, ETH_GSTRING_LEN, \"tx_queue_%u_packets\", i);\n-\t\tp += ETH_GSTRING_LEN;\n-\t\tsnprintf(p, ETH_GSTRING_LEN, \"tx_queue_%u_bytes\", i);\n-\t\tp += ETH_GSTRING_LEN;\n-\t\tsnprintf(p, ETH_GSTRING_LEN, \"rx_queue_%u_packets\", i);\n-\t\tp += ETH_GSTRING_LEN;\n-\t\tsnprintf(p, ETH_GSTRING_LEN, \"rx_queue_%u_bytes\", i);\n-\t\tp += ETH_GSTRING_LEN;\n+\t\tchar prefix[ETH_GSTRING_LEN];\n+\n+\t\tsnprintf(prefix, ETH_GSTRING_LEN, \"tx_queue_%u_\", i);\n+\t\tfm10k_add_stat_strings(&p, prefix,\n+\t\t\t\t       fm10k_gstrings_queue_stats,\n+\t\t\t\t       FM10K_QUEUE_STATS_LEN);\n+\n+\t\tsnprintf(prefix, ETH_GSTRING_LEN, \"rx_queue_%u_\", i);\n+\t\tfm10k_add_stat_strings(&p, prefix,\n+\t\t\t\t       fm10k_gstrings_queue_stats,\n+\t\t\t\t       FM10K_QUEUE_STATS_LEN);\n \t}\n }\n \n@@ -236,7 +219,6 @@ static void fm10k_get_strings(struct net_device *dev,\n static int fm10k_get_sset_count(struct net_device *dev, int sset)\n {\n \tstruct fm10k_intfc *interface = netdev_priv(dev);\n-\tstruct fm10k_iov_data *iov_data = interface->iov_data;\n \tstruct fm10k_hw *hw = &interface->hw;\n \tint stats_len = FM10K_STATIC_STATS_LEN;\n \n@@ -244,19 +226,11 @@ static int fm10k_get_sset_count(struct net_device *dev, int sset)\n \tcase ETH_SS_TEST:\n \t\treturn FM10K_TEST_LEN;\n \tcase ETH_SS_STATS:\n-\t\tstats_len += FM10K_QUEUE_STATS_LEN(hw->mac.max_queues);\n+\t\tstats_len += hw->mac.max_queues * 2 * FM10K_QUEUE_STATS_LEN;\n \n \t\tif (hw->mac.type != fm10k_mac_vf)\n \t\t\tstats_len += FM10K_PF_STATS_LEN;\n \n-\t\tif (interface->flags & FM10K_FLAG_DEBUG_STATS) {\n-\t\t\tstats_len += FM10K_DEBUG_STATS_LEN;\n-\n-\t\t\tif (iov_data)\n-\t\t\t\tstats_len += FM10K_MBX_STATS_LEN *\n-\t\t\t\t\tiov_data->num_vfs;\n-\t\t}\n-\n \t\treturn stats_len;\n \tcase ETH_SS_PRIV_FLAGS:\n \t\treturn FM10K_PRV_FLAG_LEN;\n@@ -304,11 +278,9 @@ static void fm10k_get_ethtool_stats(struct net_device *netdev,\n \t\t\t\t    struct ethtool_stats __always_unused *stats,\n \t\t\t\t    u64 *data)\n {\n-\tconst int stat_count = sizeof(struct fm10k_queue_stats) / sizeof(u64);\n \tstruct fm10k_intfc *interface = netdev_priv(netdev);\n-\tstruct fm10k_iov_data *iov_data = interface->iov_data;\n \tstruct net_device_stats *net_stats = &netdev->stats;\n-\tint i, j;\n+\tint i;\n \n \tfm10k_update_stats(interface);\n \n@@ -318,11 +290,6 @@ static void fm10k_get_ethtool_stats(struct net_device *netdev,\n \tfm10k_add_ethtool_stats(&data, interface, fm10k_gstrings_global_stats,\n \t\t\t\tFM10K_GLOBAL_STATS_LEN);\n \n-\tif (interface->flags & FM10K_FLAG_DEBUG_STATS)\n-\t\tfm10k_add_ethtool_stats(&data, interface,\n-\t\t\t\t\tfm10k_gstrings_debug_stats,\n-\t\t\t\t\tFM10K_DEBUG_STATS_LEN);\n-\n \tfm10k_add_ethtool_stats(&data, &interface->hw.mbx,\n \t\t\t\tfm10k_gstrings_mbx_stats,\n \t\t\t\tFM10K_MBX_STATS_LEN);\n@@ -333,33 +300,18 @@ static void fm10k_get_ethtool_stats(struct net_device *netdev,\n \t\t\t\t\tFM10K_PF_STATS_LEN);\n \t}\n \n-\tif ((interface->flags & FM10K_FLAG_DEBUG_STATS) && iov_data) {\n-\t\tfor (i = 0; i < iov_data->num_vfs; i++) {\n-\t\t\tstruct fm10k_vf_info *vf_info;\n-\n-\t\t\tvf_info = &iov_data->vf_info[i];\n-\n-\t\t\tfm10k_add_ethtool_stats(&data, &vf_info->mbx,\n-\t\t\t\t\t\tfm10k_gstrings_mbx_stats,\n-\t\t\t\t\t\tFM10K_MBX_STATS_LEN);\n-\t\t}\n-\t}\n-\n \tfor (i = 0; i < interface->hw.mac.max_queues; i++) {\n \t\tstruct fm10k_ring *ring;\n-\t\tu64 *queue_stat;\n \n \t\tring = interface->tx_ring[i];\n-\t\tif (ring)\n-\t\t\tqueue_stat = (u64 *)&ring->stats;\n-\t\tfor (j = 0; j < stat_count; j++)\n-\t\t\t*(data++) = ring ? queue_stat[j] : 0;\n+\t\tfm10k_add_ethtool_stats(&data, ring,\n+\t\t\t\t\tfm10k_gstrings_queue_stats,\n+\t\t\t\t\tFM10K_QUEUE_STATS_LEN);\n \n \t\tring = interface->rx_ring[i];\n-\t\tif (ring)\n-\t\t\tqueue_stat = (u64 *)&ring->stats;\n-\t\tfor (j = 0; j < stat_count; j++)\n-\t\t\t*(data++) = ring ? queue_stat[j] : 0;\n+\t\tfm10k_add_ethtool_stats(&data, ring,\n+\t\t\t\t\tfm10k_gstrings_queue_stats,\n+\t\t\t\t\tFM10K_QUEUE_STATS_LEN);\n \t}\n }\n \n@@ -1003,27 +955,14 @@ static void fm10k_self_test(struct net_device *dev,\n \n static u32 fm10k_get_priv_flags(struct net_device *netdev)\n {\n-\tstruct fm10k_intfc *interface = netdev_priv(netdev);\n-\tu32 priv_flags = 0;\n-\n-\tif (interface->flags & FM10K_FLAG_DEBUG_STATS)\n-\t\tpriv_flags |= BIT(FM10K_PRV_FLAG_DEBUG_STATS);\n-\n-\treturn priv_flags;\n+\treturn 0;\n }\n \n static int fm10k_set_priv_flags(struct net_device *netdev, u32 priv_flags)\n {\n-\tstruct fm10k_intfc *interface = netdev_priv(netdev);\n-\n \tif (priv_flags >= BIT(FM10K_PRV_FLAG_LEN))\n \t\treturn -EINVAL;\n \n-\tif (priv_flags & BIT(FM10K_PRV_FLAG_DEBUG_STATS))\n-\t\tinterface->flags |= FM10K_FLAG_DEBUG_STATS;\n-\telse\n-\t\tinterface->flags &= ~FM10K_FLAG_DEBUG_STATS;\n-\n \treturn 0;\n }\n \n",
    "prefixes": [
        "v5"
    ]
}