From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753479AbdLUKoX (ORCPT ); Thu, 21 Dec 2017 05:44:23 -0500 Received: from Galois.linutronix.de ([146.0.238.70]:54700 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753233AbdLUKnS (ORCPT ); Thu, 21 Dec 2017 05:43:18 -0500 From: Anna-Maria Gleixner To: LKML Cc: Thomas Gleixner , Peter Zijlstra , Ingo Molnar , keescook@chromium.org, Christoph Hellwig , John Stultz , Anna-Maria Gleixner , Felipe Balbi , linux-usb@vger.kernel.org Subject: [PATCH v4 35/36] usb/gadget/NCM: Replace tasklet with softirq hrtimer Date: Thu, 21 Dec 2017 11:42:04 +0100 Message-Id: <20171221104205.7269-36-anna-maria@linutronix.de> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171221104205.7269-1-anna-maria@linutronix.de> References: <20171221104205.7269-1-anna-maria@linutronix.de> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thomas Gleixner The tx_tasklet tasklet is used in invoke the hrtimer (task_timer) in softirq context. This can be also achieved without the tasklet but with HRTIMER_MODE_SOFT as hrtimer mode. Signed-off-by: Thomas Gleixner Signed-off-by: Anna-Maria Gleixner Acked-by: Felipe Balbi Cc: Felipe Balbi Cc: linux-usb@vger.kernel.org --- drivers/usb/gadget/function/f_ncm.c | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c index c5bce8e22983..5780fba620ab 100644 --- a/drivers/usb/gadget/function/f_ncm.c +++ b/drivers/usb/gadget/function/f_ncm.c @@ -73,9 +73,7 @@ struct f_ncm { struct sk_buff *skb_tx_ndp; u16 ndp_dgram_count; bool timer_force_tx; - struct tasklet_struct tx_tasklet; struct hrtimer task_timer; - bool timer_stopping; }; @@ -1104,7 +1102,7 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port, /* Delay the timer. */ hrtimer_start(&ncm->task_timer, TX_TIMEOUT_NSECS, - HRTIMER_MODE_REL); + HRTIMER_MODE_REL_SOFT); /* Add the datagram position entries */ ntb_ndp = skb_put_zero(ncm->skb_tx_ndp, dgram_idx_len); @@ -1148,17 +1146,15 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port, } /* - * This transmits the NTB if there are frames waiting. + * The transmit should only be run if no skb data has been sent + * for a certain duration. */ -static void ncm_tx_tasklet(unsigned long data) +static enum hrtimer_restart ncm_tx_timeout(struct hrtimer *data) { - struct f_ncm *ncm = (void *)data; - - if (ncm->timer_stopping) - return; + struct f_ncm *ncm = container_of(data, struct f_ncm, task_timer); /* Only send if data is available. */ - if (ncm->skb_tx_data) { + if (!ncm->timer_stopping && ncm->skb_tx_data) { ncm->timer_force_tx = true; /* XXX This allowance of a NULL skb argument to ndo_start_xmit @@ -1171,16 +1167,6 @@ static void ncm_tx_tasklet(unsigned long data) ncm->timer_force_tx = false; } -} - -/* - * The transmit should only be run if no skb data has been sent - * for a certain duration. - */ -static enum hrtimer_restart ncm_tx_timeout(struct hrtimer *data) -{ - struct f_ncm *ncm = container_of(data, struct f_ncm, task_timer); - tasklet_schedule(&ncm->tx_tasklet); return HRTIMER_NORESTART; } @@ -1513,8 +1499,7 @@ static int ncm_bind(struct usb_configuration *c, struct usb_function *f) ncm->port.open = ncm_open; ncm->port.close = ncm_close; - tasklet_init(&ncm->tx_tasklet, ncm_tx_tasklet, (unsigned long) ncm); - hrtimer_init(&ncm->task_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + hrtimer_init(&ncm->task_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL_SOFT); ncm->task_timer.function = ncm_tx_timeout; DBG(cdev, "CDC Network: %s speed IN/%s OUT/%s NOTIFY/%s\n", @@ -1623,7 +1608,6 @@ static void ncm_unbind(struct usb_configuration *c, struct usb_function *f) DBG(c->cdev, "ncm unbind\n"); hrtimer_cancel(&ncm->task_timer); - tasklet_kill(&ncm->tx_tasklet); ncm_string_defs[0].id = 0; usb_free_all_descriptors(f); -- 2.11.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [v4,35/36] usb/gadget/NCM: Replace tasklet with softirq hrtimer From: Anna-Maria Gleixner Message-Id: <20171221104205.7269-36-anna-maria@linutronix.de> Date: Thu, 21 Dec 2017 11:42:04 +0100 To: LKML Cc: Thomas Gleixner , Peter Zijlstra , Ingo Molnar , keescook@chromium.org, Christoph Hellwig , John Stultz , Anna-Maria Gleixner , Felipe Balbi , linux-usb@vger.kernel.org List-ID: RnJvbTogVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+CgpUaGUgdHhfdGFza2xl dCB0YXNrbGV0IGlzIHVzZWQgaW4gaW52b2tlIHRoZSBocnRpbWVyICh0YXNrX3RpbWVyKSBpbgpz b2Z0aXJxIGNvbnRleHQuIFRoaXMgY2FuIGJlIGFsc28gYWNoaWV2ZWQgd2l0aG91dCB0aGUgdGFz a2xldCBidXQKd2l0aCBIUlRJTUVSX01PREVfU09GVCBhcyBocnRpbWVyIG1vZGUuCgpTaWduZWQt b2ZmLWJ5OiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KU2lnbmVkLW9mZi1i eTogQW5uYS1NYXJpYSBHbGVpeG5lciA8YW5uYS1tYXJpYUBsaW51dHJvbml4LmRlPgpBY2tlZC1i eTogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbGludXguaW50ZWwuY29tPgpDYzogRmVsaXBl IEJhbGJpIDxiYWxiaUBrZXJuZWwub3JnPgpDYzogbGludXgtdXNiQHZnZXIua2VybmVsLm9yZwot LS0KIGRyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX25jbS5jIHwgMzAgKysrKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCAyMyBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9u Y20uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mdW5jdGlvbi9mX25jbS5jCmluZGV4IGM1YmNlOGUy Mjk4My4uNTc4MGZiYTYyMGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rp b24vZl9uY20uYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnVuY3Rpb24vZl9uY20uYwpAQCAt NzMsOSArNzMsNyBAQCBzdHJ1Y3QgZl9uY20gewogCXN0cnVjdCBza19idWZmCQkJKnNrYl90eF9u ZHA7CiAJdTE2CQkJCW5kcF9kZ3JhbV9jb3VudDsKIAlib29sCQkJCXRpbWVyX2ZvcmNlX3R4Owot CXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJdHhfdGFza2xldDsKIAlzdHJ1Y3QgaHJ0aW1lcgkJCXRh c2tfdGltZXI7Ci0KIAlib29sCQkJCXRpbWVyX3N0b3BwaW5nOwogfTsKIApAQCAtMTEwNCw3ICsx MTAyLDcgQEAgc3RhdGljIHN0cnVjdCBza19idWZmICpuY21fd3JhcF9udGIoc3RydWN0IGdldGhl ciAqcG9ydCwKIAogCQkvKiBEZWxheSB0aGUgdGltZXIuICovCiAJCWhydGltZXJfc3RhcnQoJm5j bS0+dGFza190aW1lciwgVFhfVElNRU9VVF9OU0VDUywKLQkJCSAgICAgIEhSVElNRVJfTU9ERV9S RUwpOworCQkJICAgICAgSFJUSU1FUl9NT0RFX1JFTF9TT0ZUKTsKIAogCQkvKiBBZGQgdGhlIGRh dGFncmFtIHBvc2l0aW9uIGVudHJpZXMgKi8KIAkJbnRiX25kcCA9IHNrYl9wdXRfemVybyhuY20t PnNrYl90eF9uZHAsIGRncmFtX2lkeF9sZW4pOwpAQCAtMTE0OCwxNyArMTE0NiwxNSBAQCBzdGF0 aWMgc3RydWN0IHNrX2J1ZmYgKm5jbV93cmFwX250YihzdHJ1Y3QgZ2V0aGVyICpwb3J0LAogfQog CiAvKgotICogVGhpcyB0cmFuc21pdHMgdGhlIE5UQiBpZiB0aGVyZSBhcmUgZnJhbWVzIHdhaXRp bmcuCisgKiBUaGUgdHJhbnNtaXQgc2hvdWxkIG9ubHkgYmUgcnVuIGlmIG5vIHNrYiBkYXRhIGhh cyBiZWVuIHNlbnQKKyAqIGZvciBhIGNlcnRhaW4gZHVyYXRpb24uCiAgKi8KLXN0YXRpYyB2b2lk IG5jbV90eF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBlbnVtIGhydGltZXJf cmVzdGFydCBuY21fdHhfdGltZW91dChzdHJ1Y3QgaHJ0aW1lciAqZGF0YSkKIHsKLQlzdHJ1Y3Qg Zl9uY20JKm5jbSA9ICh2b2lkICopZGF0YTsKLQotCWlmIChuY20tPnRpbWVyX3N0b3BwaW5nKQot CQlyZXR1cm47CisJc3RydWN0IGZfbmNtICpuY20gPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0 IGZfbmNtLCB0YXNrX3RpbWVyKTsKIAogCS8qIE9ubHkgc2VuZCBpZiBkYXRhIGlzIGF2YWlsYWJs ZS4gKi8KLQlpZiAobmNtLT5za2JfdHhfZGF0YSkgeworCWlmICghbmNtLT50aW1lcl9zdG9wcGlu ZyAmJiBuY20tPnNrYl90eF9kYXRhKSB7CiAJCW5jbS0+dGltZXJfZm9yY2VfdHggPSB0cnVlOwog CiAJCS8qIFhYWCBUaGlzIGFsbG93YW5jZSBvZiBhIE5VTEwgc2tiIGFyZ3VtZW50IHRvIG5kb19z dGFydF94bWl0CkBAIC0xMTcxLDE2ICsxMTY3LDYgQEAgc3RhdGljIHZvaWQgbmNtX3R4X3Rhc2ts ZXQodW5zaWduZWQgbG9uZyBkYXRhKQogCiAJCW5jbS0+dGltZXJfZm9yY2VfdHggPSBmYWxzZTsK IAl9Ci19Ci0KLS8qCi0gKiBUaGUgdHJhbnNtaXQgc2hvdWxkIG9ubHkgYmUgcnVuIGlmIG5vIHNr YiBkYXRhIGhhcyBiZWVuIHNlbnQKLSAqIGZvciBhIGNlcnRhaW4gZHVyYXRpb24uCi0gKi8KLXN0 YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBuY21fdHhfdGltZW91dChzdHJ1Y3QgaHJ0aW1lciAq ZGF0YSkKLXsKLQlzdHJ1Y3QgZl9uY20gKm5jbSA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3Qg Zl9uY20sIHRhc2tfdGltZXIpOwotCXRhc2tsZXRfc2NoZWR1bGUoJm5jbS0+dHhfdGFza2xldCk7 CiAJcmV0dXJuIEhSVElNRVJfTk9SRVNUQVJUOwogfQogCkBAIC0xNTEzLDggKzE0OTksNyBAQCBz dGF0aWMgaW50IG5jbV9iaW5kKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVz Yl9mdW5jdGlvbiAqZikKIAluY20tPnBvcnQub3BlbiA9IG5jbV9vcGVuOwogCW5jbS0+cG9ydC5j bG9zZSA9IG5jbV9jbG9zZTsKIAotCXRhc2tsZXRfaW5pdCgmbmNtLT50eF90YXNrbGV0LCBuY21f dHhfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpIG5jbSk7Ci0JaHJ0aW1lcl9pbml0KCZuY20tPnRh c2tfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7CisJaHJ0aW1lcl9p bml0KCZuY20tPnRhc2tfdGltZXIsIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTF9T T0ZUKTsKIAluY20tPnRhc2tfdGltZXIuZnVuY3Rpb24gPSBuY21fdHhfdGltZW91dDsKIAogCURC RyhjZGV2LCAiQ0RDIE5ldHdvcms6ICVzIHNwZWVkIElOLyVzIE9VVC8lcyBOT1RJRlkvJXNcbiIs CkBAIC0xNjIzLDcgKzE2MDgsNiBAQCBzdGF0aWMgdm9pZCBuY21fdW5iaW5kKHN0cnVjdCB1c2Jf Y29uZmlndXJhdGlvbiAqYywgc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKIAlEQkcoYy0+Y2Rldiwg Im5jbSB1bmJpbmRcbiIpOwogCiAJaHJ0aW1lcl9jYW5jZWwoJm5jbS0+dGFza190aW1lcik7Ci0J dGFza2xldF9raWxsKCZuY20tPnR4X3Rhc2tsZXQpOwogCiAJbmNtX3N0cmluZ19kZWZzWzBdLmlk ID0gMDsKIAl1c2JfZnJlZV9hbGxfZGVzY3JpcHRvcnMoZik7Cg==