get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 952222,
    "url": "http://patchwork.ozlabs.org/api/patches/952222/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales/",
    "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": "<1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales>",
    "list_archive_url": null,
    "date": "2018-08-01T07:29:34",
    "name": "[E1000-devel] igb: CPU0 latency and updating statistics",
    "commit_ref": null,
    "pull_url": null,
    "state": "rejected",
    "archived": false,
    "hash": "234e80cc6f0d6967e3dbff3c3c391fe9a67d44d3",
    "submitter": {
        "id": 74652,
        "url": "http://patchwork.ozlabs.org/api/people/74652/?format=api",
        "name": "JABLONSKY Jan",
        "email": "Jan.JABLONSKY@thalesgroup.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/1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales/mbox/",
    "series": [
        {
            "id": 58824,
            "url": "http://patchwork.ozlabs.org/api/series/58824/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/list/?series=58824",
            "date": "2018-08-01T07:29:34",
            "name": "[E1000-devel] igb: CPU0 latency and updating statistics",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/58824/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/952222/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/952222/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.138; helo=whitealder.osuosl.org;\n\tenvelope-from=intel-wired-lan-bounces@osuosl.org;\n\treceiver=<UNKNOWN>)",
            "ozlabs.org; dmarc=none (p=none dis=none)\n\theader.from=thalesgroup.com"
        ],
        "Received": [
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 41gbQt6VJHz9s3q\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu,  2 Aug 2018 00:33:58 +1000 (AEST)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id EEDA286D4A;\n\tWed,  1 Aug 2018 14:33:56 +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 eQEksic74P9o; Wed,  1 Aug 2018 14:33:55 +0000 (UTC)",
            "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 2FE1C86D3F;\n\tWed,  1 Aug 2018 14:33:55 +0000 (UTC)",
            "from whitealder.osuosl.org (smtp1.osuosl.org [140.211.166.138])\n\tby ash.osuosl.org (Postfix) with ESMTP id A6A941C0156\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  1 Aug 2018 07:35:21 +0000 (UTC)",
            "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id A2E5A87758\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  1 Aug 2018 07:35:21 +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 af0otuZeX+9O for <intel-wired-lan@lists.osuosl.org>;\n\tWed,  1 Aug 2018 07:35:20 +0000 (UTC)",
            "from thsbbfxrt01p.thalesgroup.com (thsbbfxrt01p.thalesgroup.com\n\t[192.54.144.131])\n\tby whitealder.osuosl.org (Postfix) with ESMTPS id 3676187739\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tWed,  1 Aug 2018 07:35:20 +0000 (UTC)",
            "from thsbbfxrt01p.thalesgroup.com (localhost [127.0.0.1])\n\tby localhost (Postfix) with SMTP id 41gQ1G6lsvz6Rk;\n\tWed,  1 Aug 2018 09:29:38 +0200 (CEST)"
        ],
        "X-Virus-Scanned": [
            "amavisd-new at osuosl.org",
            "amavisd-new at osuosl.org"
        ],
        "X-Greylist": "delayed 00:05:39 by SQLgrey-1.7.6",
        "From": "JABLONSKY Jan <Jan.JABLONSKY@thalesgroup.com>",
        "To": "Jeff Kirsher <jeffrey.t.kirsher@intel.com>",
        "Thread-Topic": "[E1000-devel] [PATCH] igb: CPU0 latency and updating statistics",
        "Thread-Index": "AQHUKWlliIZIPdorn0yA6udIRduKDQ==",
        "Date": "Wed, 1 Aug 2018 07:29:34 +0000",
        "Message-ID": "<1533108587.16601.56.camel@atviedlbe741.rss.d3s.at.thales>",
        "Accept-Language": "en-US, fr-FR",
        "Content-Language": "en-US",
        "X-MS-Has-Attach": "",
        "X-MS-TNEF-Correlator": "",
        "x-mailer": "Evolution 3.10.4-0ubuntu2 ",
        "x-originating-ip": "[10.177.70.237]",
        "x-pmwin-version": "4.0.3, Antivirus-Engine: 3.72.1, Antivirus-Data: 5.53",
        "Content-ID": "<EE991B26B6702E41AE52E5259D1D70C6@iris.infra.thales>",
        "MIME-Version": "1.0",
        "X-Mailman-Approved-At": "Wed, 01 Aug 2018 14:33:54 +0000",
        "Subject": "[Intel-wired-lan] [E1000-devel] [PATCH] igb: CPU0 latency and\n\tupdating statistics",
        "X-BeenThere": "intel-wired-lan@osuosl.org",
        "X-Mailman-Version": "2.1.24",
        "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>",
        "Cc": "\"e1000-devel@lists.sourceforge.net\" <e1000-devel@lists.sourceforge.net>, \n\t\"netdev@vger.kernel.org\" <netdev@vger.kernel.org>,\n\t\"intel-wired-lan@lists.osuosl.org\" <intel-wired-lan@lists.osuosl.org>,\n\t\"linux-kernel@vger.kernel.org\" <linux-kernel@vger.kernel.org>",
        "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": "The Watchdog workqueue in igb driver is scheduled every 2s for each \nnetwork interface. That includes updating a statistics protected by \nspinlock. Function igb_update_stats in this case will be protected \nagainst preemption. According to number of a statistics registers \n(cca 60), processing this function might cause additional cpu load\n on CPU0.\n\nIn case of statistics spinlock may be replaced with mutex, which \nreduce latency on CPU0.\n\n\n# Measurements\nMeasurements were performed on Intel Atom E3950 (Quad-Core), \nE3930 (Dual-Core)\n\n# Cyclictest\nHigh latency is always on CPU0 which might be in range \nfrom 70us to 140us (sometimes higher)\n\n\n# cyclictest -l1000000 -Smp90 -i200 -q\n\n# E3930\n# default\nT: 0 ( 1745) P:90 I:200 C:1000000 Min: 2 Act: 3 Avg: 3 Max: 72\nT: 1 ( 1746) P:90 I:700 C: 285737 Min: 3 Act: 4 Avg: 3 Max: 13\n\n# with patch\nT: 0 (  932) P:90 I:200 C:1000000 Min: 2 Act: 3 Avg: 3 Max: 22\nT: 1 (  933) P:90 I:700 C: 285736 Min: 2 Act: 3 Avg: 3 Max: 12\n\n\n# E3950\n# default\nT: 0 ( 1103) P:90 I:200 C:1000000 Min: 2 Act: 2 Avg: 2 Max: 89\nT: 1 ( 1104) P:90 I:700 C: 285738 Min: 2 Act: 4 Avg: 2 Max: 9\nT: 2 ( 1105) P:90 I:1200 C: 166678 Min: 2 Act: 5 Avg: 3 Max: 22\nT: 3 ( 1106) P:90 I:1700 C: 117653 Min: 2 Act: 6 Avg: 2 Max: 13\n\n# with patch\nT: 0 (  879) P:90 I:200 C:1000000 Min: 2 Act: 3 Avg: 3 Max: 26\nT: 1 (  880) P:90 I:700 C: 285729 Min: 3 Act: 4 Avg: 3 Max: 22\nT: 2 (  881) P:90 I:1200 C: 166672 Min: 3 Act: 7 Avg: 3 Max: 24\nT: 3 (  882) P:90 I:1700 C: 117649 Min: 3 Act: 7 Avg: 3 Max: 8\n\n\nAdditionally I think updating statistics and watchdog task should \nbe implemented in 2 separated ways\n\nPatch is created against a linux-4.4\n\nReviewed also by: Bernhard Kaindl  <bernhard.kaindl@thalesgroup.com>\n\nSigned-off-by: Jan Jablonsky <jan.jablonsky@thalesgroup.com>\n---\n drivers/net/ethernet/intel/igb/igb.h         |  2 +-\n drivers/net/ethernet/intel/igb/igb_ethtool.c |  4 ++--\n drivers/net/ethernet/intel/igb/igb_main.c    | 14 +++++++-------\n 3 files changed, 10 insertions(+), 10 deletions(-)\n\n \tcase e1000_82576:\n@@ -4367,9 +4367,9 @@ static void igb_watchdog_task(struct work_struct\n*work)\n \t\t}\n \t}\n \n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, &adapter->stats64);\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n \n \tfor (i = 0; i < adapter->num_tx_queues; i++) {\n \t\tstruct igb_ring *tx_ring = adapter->tx_ring[i];\n@@ -5152,10 +5152,10 @@ static struct rtnl_link_stats64\n*igb_get_stats64(struct net_device *netdev,\n {\n \tstruct igb_adapter *adapter = netdev_priv(netdev);\n \n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, &adapter->stats64);\n \tmemcpy(stats, &adapter->stats64, sizeof(*stats));\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n \n \treturn stats;\n }",
    "diff": "diff --git a/drivers/net/ethernet/intel/igb/igb.h\nb/drivers/net/ethernet/intel/igb/igb.h\nindex e3cb93b..85d68ea 100644\n--- a/drivers/net/ethernet/intel/igb/igb.h\n+++ b/drivers/net/ethernet/intel/igb/igb.h\n@@ -401,7 +401,7 @@ struct igb_adapter {\n \t/* OS defined structs */\n \tstruct pci_dev *pdev;\n \n-\tspinlock_t stats64_lock;\n+\tstruct mutex stats64_lock;\n \tstruct rtnl_link_stats64 stats64;\n \n \t/* structs defined in e1000_hw.h */\ndiff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c\nb/drivers/net/ethernet/intel/igb/igb_ethtool.c\nindex 2529bc6..07cc2b6 100644\n--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c\n+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c\n@@ -2276,7 +2276,7 @@ static void igb_get_ethtool_stats(struct\nnet_device *netdev,\n \tint i, j;\n \tchar *p;\n \n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, net_stats);\n \n \tfor (i = 0; i < IGB_GLOBAL_STATS_LEN; i++) {\n@@ -2319,7 +2319,7 @@ static void igb_get_ethtool_stats(struct\nnet_device *netdev,\n \t\t} while (u64_stats_fetch_retry_irq(&ring->rx_syncp, start));\n \t\ti += IGB_RX_QUEUE_STATS_LEN;\n \t}\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n }\n \n static void igb_get_strings(struct net_device *netdev, u32 stringset,\nu8 *data)\ndiff --git a/drivers/net/ethernet/intel/igb/igb_main.c\nb/drivers/net/ethernet/intel/igb/igb_main.c\nindex 02b23f6..9d22398 100644\n--- a/drivers/net/ethernet/intel/igb/igb_main.c\n+++ b/drivers/net/ethernet/intel/igb/igb_main.c\n@@ -1810,9 +1810,9 @@ void igb_down(struct igb_adapter *adapter)\n \tdel_timer_sync(&adapter->phy_info_timer);\n \n \t/* record the stats before reset*/\n-\tspin_lock(&adapter->stats64_lock);\n+\tmutex_lock(&adapter->stats64_lock);\n \tigb_update_stats(adapter, &adapter->stats64);\n-\tspin_unlock(&adapter->stats64_lock);\n+\tmutex_unlock(&adapter->stats64_lock);\n \n \tadapter->link_speed = 0;\n \tadapter->link_duplex = 0;\n@@ -2975,7 +2975,7 @@ static int igb_sw_init(struct igb_adapter\n*adapter)\n \t\t\t\t  VLAN_HLEN;\n \tadapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;\n \n-\tspin_lock_init(&adapter->stats64_lock);\n+\tmutex_init(&adapter->stats64_lock);\n #ifdef CONFIG_PCI_IOV\n \tswitch (hw->mac.type) {\n",
    "prefixes": [
        "E1000-devel"
    ]
}