Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/631849/?format=api
{ "id": 631849, "url": "http://patchwork.ozlabs.org/api/patches/631849/?format=api", "web_url": "http://patchwork.ozlabs.org/project/intel-wired-lan/patch/20160607230902.5457-2-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": "<20160607230902.5457-2-jacob.e.keller@intel.com>", "list_archive_url": null, "date": "2016-06-07T23:08:45", "name": "[v2,01/18] fm10k: prevent multiple threads updating statistics", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "71db922385f3ef5fe875f7ff9ff8d8cc5f2a9b00", "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/20160607230902.5457-2-jacob.e.keller@intel.com/mbox/", "series": [], "comments": "http://patchwork.ozlabs.org/api/patches/631849/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/631849/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 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 3rPS1j1hXTz9sC3\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 8 Jun 2016 09:09:13 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id B0C648A888;\n\tTue, 7 Jun 2016 23:09:11 +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 Yk1X3FmfBj7F; Tue, 7 Jun 2016 23:09:09 +0000 (UTC)", "from ash.osuosl.org (ash.osuosl.org [140.211.166.34])\n\tby whitealder.osuosl.org (Postfix) with ESMTP id 8CCBF8A71C;\n\tTue, 7 Jun 2016 23:09:09 +0000 (UTC)", "from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133])\n\tby ash.osuosl.org (Postfix) with ESMTP id 550751C127A\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 7 Jun 2016 23:09:06 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id 504CF8828B\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 7 Jun 2016 23:09:06 +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 E6dBB8CgwCma for <intel-wired-lan@lists.osuosl.org>;\n\tTue, 7 Jun 2016 23:09:05 +0000 (UTC)", "from mga04.intel.com (mga04.intel.com [192.55.52.120])\n\tby hemlock.osuosl.org (Postfix) with ESMTP id A760288142\n\tfor <intel-wired-lan@lists.osuosl.org>;\n\tTue, 7 Jun 2016 23:09:05 +0000 (UTC)", "from fmsmga003.fm.intel.com ([10.253.24.29])\n\tby fmsmga104.fm.intel.com with ESMTP; 07 Jun 2016 16:09:04 -0700", "from jekeller-desk.amr.corp.intel.com (HELO\n\tjekeller-desk.jekeller.internal) ([134.134.3.116])\n\tby FMSMGA003.fm.intel.com with ESMTP; 07 Jun 2016 16:09:05 -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.26,436,1459839600\"; d=\"scan'208\";a=\"715507140\"", "From": "Jacob Keller <jacob.e.keller@intel.com>", "To": "Intel Wired LAN <intel-wired-lan@lists.osuosl.org>", "Date": "Tue, 7 Jun 2016 16:08:45 -0700", "Message-Id": "<20160607230902.5457-2-jacob.e.keller@intel.com>", "X-Mailer": "git-send-email 2.9.0.rc1.405.g81f467e", "In-Reply-To": "<20160607230902.5457-1-jacob.e.keller@intel.com>", "References": "<20160607230902.5457-1-jacob.e.keller@intel.com>", "Subject": "[Intel-wired-lan] [PATCH v2 01/18] fm10k: prevent multiple threads\n\tupdating 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": "Also prevent updating stats while the interface is down. If we're\nalready updating stats, just return doing nothing. When we take the\ndevice down, block stat updates until we come back up. This ensures that\nwe avoid tearing down rings when we're updating statistics, and prevents\nupdating statistics until we're up.\n\nWe can't re-use the __FM10K_DOWN for this because it wouldn't prevent\nmultiple threads from accessing statistics. Neither does it prevent the\ncase where we start updating stats and then start going down in another\nthread.\n\nThe fm10k_get_stats64 is except from this, because it has a completely\ndifferent flow which does not suffer from the same issues as\nfm10k_update_stats might.\n\nSigned-off-by: Jacob Keller <jacob.e.keller@intel.com>\n---\n drivers/net/ethernet/intel/fm10k/fm10k.h | 1 +\n drivers/net/ethernet/intel/fm10k/fm10k_pci.c | 14 ++++++++++++++\n 2 files changed, 15 insertions(+)", "diff": "diff --git a/drivers/net/ethernet/intel/fm10k/fm10k.h b/drivers/net/ethernet/intel/fm10k/fm10k.h\nindex e98b86bf0ca1..c8d0817766bf 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k.h\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k.h\n@@ -362,6 +362,7 @@ enum fm10k_state_t {\n \t__FM10K_SERVICE_DISABLE,\n \t__FM10K_MBX_LOCK,\n \t__FM10K_LINK_DOWN,\n+\t__FM10K_UPDATING_STATS,\n };\n \n static inline void fm10k_mbx_lock(struct fm10k_intfc *interface)\ndiff --git a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c\nindex be0b7dea6e72..44393763fe77 100644\n--- a/drivers/net/ethernet/intel/fm10k/fm10k_pci.c\n+++ b/drivers/net/ethernet/intel/fm10k/fm10k_pci.c\n@@ -372,6 +372,10 @@ void fm10k_update_stats(struct fm10k_intfc *interface)\n \tu64 bytes, pkts;\n \tint i;\n \n+\t/* ensure only one thread updates stats at a time */\n+\tif (test_and_set_bit(__FM10K_UPDATING_STATS, &interface->state))\n+\t\treturn;\n+\n \t/* do not allow stats update via service task for next second */\n \tinterface->next_stats_update = jiffies + HZ;\n \n@@ -449,6 +453,8 @@ void fm10k_update_stats(struct fm10k_intfc *interface)\n \t/* Fill out the OS statistics structure */\n \tnet_stats->rx_errors = rx_errors;\n \tnet_stats->rx_dropped = interface->stats.nodesc_drop.count;\n+\n+\tclear_bit(__FM10K_UPDATING_STATS, &interface->state);\n }\n \n /**\n@@ -1572,6 +1578,9 @@ void fm10k_up(struct fm10k_intfc *interface)\n \t/* configure interrupts */\n \thw->mac.ops.update_int_moderator(hw);\n \n+\t/* enable statistics capture again */\n+\tclear_bit(__FM10K_UPDATING_STATS, &interface->state);\n+\n \t/* clear down bit to indicate we are ready to go */\n \tclear_bit(__FM10K_DOWN, &interface->state);\n \n@@ -1629,6 +1638,10 @@ void fm10k_down(struct fm10k_intfc *interface)\n \t/* capture stats one last time before stopping interface */\n \tfm10k_update_stats(interface);\n \n+\t/* prevent updating statistics while we're down */\n+\twhile (test_and_set_bit(__FM10K_UPDATING_STATS, &interface->state))\n+\t\tusleep_range(1000, 2000);\n+\n \t/* Disable DMA engine for Tx/Rx */\n \terr = hw->mac.ops.stop_hw(hw);\n \tif (err)\n@@ -1757,6 +1770,7 @@ static int fm10k_sw_init(struct fm10k_intfc *interface,\n \n \t/* Start off interface as being down */\n \tset_bit(__FM10K_DOWN, &interface->state);\n+\tset_bit(__FM10K_UPDATING_STATS, &interface->state);\n \n \treturn 0;\n }\n", "prefixes": [ "v2", "01/18" ] }