Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/808230/?format=api
{ "id": 808230, "url": "http://patchwork.ozlabs.org/api/patches/808230/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/patch/20170831105827.479650817@linutronix.de/", "project": { "id": 7, "url": "http://patchwork.ozlabs.org/api/projects/7/?format=api", "name": "Linux network development", "link_name": "netdev", "list_id": "netdev.vger.kernel.org", "list_email": "netdev@vger.kernel.org", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20170831105827.479650817@linutronix.de>", "list_archive_url": null, "date": "2017-08-31T12:23:46", "name": "[24/25] net/cdc_ncm: Replace tasklet with softirq hrtimer", "commit_ref": null, "pull_url": null, "state": "not-applicable", "archived": true, "hash": "5536883b5bc1e7e8b2e9f2e3d45742926836c99f", "submitter": { "id": 68517, "url": "http://patchwork.ozlabs.org/api/people/68517/?format=api", "name": "Anna-Maria Behnsen", "email": "anna-maria@linutronix.de" }, "delegate": { "id": 34, "url": "http://patchwork.ozlabs.org/api/users/34/?format=api", "username": "davem", "first_name": "David", "last_name": "Miller", "email": "davem@davemloft.net" }, "mbox": "http://patchwork.ozlabs.org/project/netdev/patch/20170831105827.479650817@linutronix.de/mbox/", "series": [ { "id": 818, "url": "http://patchwork.ozlabs.org/api/series/818/?format=api", "web_url": "http://patchwork.ozlabs.org/project/netdev/list/?series=818", "date": "2017-08-31T12:23:44", "name": null, "version": 1, "mbox": "http://patchwork.ozlabs.org/series/818/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/808230/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/808230/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<netdev-owner@vger.kernel.org>", "X-Original-To": "patchwork-incoming@ozlabs.org", "Delivered-To": "patchwork-incoming@ozlabs.org", "Authentication-Results": "ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=netdev-owner@vger.kernel.org;\n\treceiver=<UNKNOWN>)", "Received": [ "from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xjhRH5ByFz9sNr\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu, 31 Aug 2017 22:25:31 +1000 (AEST)", "(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1751406AbdHaMZU (ORCPT <rfc822;patchwork-incoming@ozlabs.org>);\n\tThu, 31 Aug 2017 08:25:20 -0400", "from Galois.linutronix.de ([146.0.238.70]:60727 \"EHLO\n\tGalois.linutronix.de\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1751826AbdHaMYT (ORCPT\n\t<rfc822;netdev@vger.kernel.org>); Thu, 31 Aug 2017 08:24:19 -0400", "from localhost ([127.0.0.1] helo=hypnos.tec.linutronix.de)\n\tby Galois.linutronix.de with esmtp (Exim 4.80)\n\t(envelope-from <anna-maria@linutronix.de>)\n\tid 1dnOUK-0006tW-JB; Thu, 31 Aug 2017 14:22:24 +0200" ], "Message-Id": "<20170831105827.479650817@linutronix.de>", "User-Agent": "quilt/0.63-1", "Date": "Thu, 31 Aug 2017 12:23:46 -0000", "From": "Anna-Maria Gleixner <anna-maria@linutronix.de>", "To": "LKML <linux-kernel@vger.kernel.org>", "Cc": "Peter Zijlstra <peterz@infradead.org>, Ingo Molnar <mingo@redhat.com>,\n\tChristoph Hellwig <hch@lst.org>, keescook@chromium.org,\n\tJohn Stultz <john.stultz@linaro.org>,\n\tThomas Gleixner <tglx@linutronix.de>, Oliver Neukum <oliver@neukum.org>,\n\tGreg Kroah-Hartman <gregkh@linuxfoundation.org>,\n\tlinux-usb@vger.kernel.org, netdev@vger.kernel.org", "Subject": "[PATCH 24/25] net/cdc_ncm: Replace tasklet with softirq hrtimer", "References": "<20170831105725.809317030@linutronix.de>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Disposition": "inline;\n\tfilename=netcdc_ncm_Replace_tasklet_with_softirq_hrtimer.patch", "Sender": "netdev-owner@vger.kernel.org", "Precedence": "bulk", "List-ID": "<netdev.vger.kernel.org>", "X-Mailing-List": "netdev@vger.kernel.org" }, "content": "From: Thomas Gleixner <tglx@linutronix.de>\n\nThe bh tasklet is used in invoke the hrtimer (cdc_ncm_tx_timer_cb) in\nsoftirq context. This can be also achieved without the tasklet but with\nCLOCK_MONOTONIC_SOFT as hrtimer base.\n\nSigned-off-by: Thomas Gleixner <tglx@linutronix.de>\nSigned-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de>\nCc: Oliver Neukum <oliver@neukum.org>\nCc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>\nCc: linux-usb@vger.kernel.org\nCc: netdev@vger.kernel.org\n---\n drivers/net/usb/cdc_ncm.c | 37 ++++++++++++++++---------------------\n include/linux/usb/cdc_ncm.h | 2 +-\n 2 files changed, 17 insertions(+), 22 deletions(-)", "diff": "--- a/drivers/net/usb/cdc_ncm.c\n+++ b/drivers/net/usb/cdc_ncm.c\n@@ -61,7 +61,6 @@ static bool prefer_mbim;\n module_param(prefer_mbim, bool, S_IRUGO | S_IWUSR);\n MODULE_PARM_DESC(prefer_mbim, \"Prefer MBIM setting on dual NCM/MBIM functions\");\n \n-static void cdc_ncm_txpath_bh(unsigned long param);\n static void cdc_ncm_tx_timeout_start(struct cdc_ncm_ctx *ctx);\n static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *hr_timer);\n static struct usb_driver cdc_ncm_driver;\n@@ -777,10 +776,9 @@ int cdc_ncm_bind_common(struct usbnet *d\n \tif (!ctx)\n \t\treturn -ENOMEM;\n \n-\thrtimer_init(&ctx->tx_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);\n+\thrtimer_init(&ctx->tx_timer, CLOCK_MONOTONIC_SOFT, HRTIMER_MODE_REL);\n \tctx->tx_timer.function = &cdc_ncm_tx_timer_cb;\n-\tctx->bh.data = (unsigned long)dev;\n-\tctx->bh.func = cdc_ncm_txpath_bh;\n+\tctx->usbnet = dev;\n \tatomic_set(&ctx->stop, 0);\n \tspin_lock_init(&ctx->mtx);\n \n@@ -967,10 +965,7 @@ void cdc_ncm_unbind(struct usbnet *dev,\n \n \tatomic_set(&ctx->stop, 1);\n \n-\tif (hrtimer_active(&ctx->tx_timer))\n-\t\thrtimer_cancel(&ctx->tx_timer);\n-\n-\ttasklet_kill(&ctx->bh);\n+\thrtimer_cancel(&ctx->tx_timer);\n \n \t/* handle devices with combined control and data interface */\n \tif (ctx->control == ctx->data)\n@@ -1348,20 +1343,9 @@ static void cdc_ncm_tx_timeout_start(str\n \t\t\t\tHRTIMER_MODE_REL);\n }\n \n-static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *timer)\n+static void cdc_ncm_txpath_bh(struct cdc_ncm_ctx *ctx)\n {\n-\tstruct cdc_ncm_ctx *ctx =\n-\t\t\tcontainer_of(timer, struct cdc_ncm_ctx, tx_timer);\n-\n-\tif (!atomic_read(&ctx->stop))\n-\t\ttasklet_schedule(&ctx->bh);\n-\treturn HRTIMER_NORESTART;\n-}\n-\n-static void cdc_ncm_txpath_bh(unsigned long param)\n-{\n-\tstruct usbnet *dev = (struct usbnet *)param;\n-\tstruct cdc_ncm_ctx *ctx = (struct cdc_ncm_ctx *)dev->data[0];\n+\tstruct usbnet *dev = ctx->usbnet;\n \n \tspin_lock_bh(&ctx->mtx);\n \tif (ctx->tx_timer_pending != 0) {\n@@ -1379,6 +1363,17 @@ static void cdc_ncm_txpath_bh(unsigned l\n \t}\n }\n \n+static enum hrtimer_restart cdc_ncm_tx_timer_cb(struct hrtimer *timer)\n+{\n+\tstruct cdc_ncm_ctx *ctx =\n+\t\t\tcontainer_of(timer, struct cdc_ncm_ctx, tx_timer);\n+\n+\tif (!atomic_read(&ctx->stop))\n+\t\tcdc_ncm_txpath_bh(ctx);\n+\n+\treturn HRTIMER_NORESTART;\n+}\n+\n struct sk_buff *\n cdc_ncm_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags)\n {\n--- a/include/linux/usb/cdc_ncm.h\n+++ b/include/linux/usb/cdc_ncm.h\n@@ -92,7 +92,6 @@\n struct cdc_ncm_ctx {\n \tstruct usb_cdc_ncm_ntb_parameters ncm_parm;\n \tstruct hrtimer tx_timer;\n-\tstruct tasklet_struct bh;\n \n \tconst struct usb_cdc_ncm_desc *func_desc;\n \tconst struct usb_cdc_mbim_desc *mbim_desc;\n@@ -101,6 +100,7 @@ struct cdc_ncm_ctx {\n \n \tstruct usb_interface *control;\n \tstruct usb_interface *data;\n+\tstruct usbnet *usbnet;\n \n \tstruct sk_buff *tx_curr_skb;\n \tstruct sk_buff *tx_rem_skb;\n", "prefixes": [ "24/25" ] }