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: [5/5] USB: cdc-acm: clean up throttle handling From: Johan Hovold Message-Id: <20190425160540.10036-6-johan@kernel.org> Date: Thu, 25 Apr 2019 18:05:40 +0200 To: Alan Stern , Oliver Neukum , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, Johan Hovold List-ID: Q2xlYW4gdXAgdGhlIHRocm90dGxlIGltcGxlbWVudGF0aW9uIGJ5IGRyb3BwaW5nIHRoZSByZWR1 bmRhbnQKdGhyb3R0bGVfcmVxIGZsYWcgd2hpY2ggd2FzIGEgcmVtbmFudCBmcm9tIGJhY2sgd2hl biBVU0Igc2VyaWFsIGhhZCBvbmx5CmEgc2luZ2xlIHJlYWQgVVJCLCBzb21ldGhpbmcgd2hpY2gg d2FzIGxhdGVyIGNhcnJpZWQgb3ZlciB0byBjZGMtYWNtLgoKQWxzbyBjb252ZXJ0IHRoZSB0aHJv dHRsZWQgZmxhZyB0byBhbiBhdG9taWMgYml0IGZsYWcuCgpTaWduZWQtb2ZmLWJ5OiBKb2hhbiBI b3ZvbGQgPGpvaGFuQGtlcm5lbC5vcmc+Ci0tLQogZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5j IHwgMzMgKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3VzYi9jbGFz cy9jZGMtYWNtLmggfCAgMyArLS0KIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspLCAy NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMg Yi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggYzAzYWE4NTUwOTgwLi4xODNiNDE3 NTNjOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2 ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTQ2OCw3ICs0NjgsNiBAQCBzdGF0aWMgdm9pZCBh Y21fcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgYWNtX3Ji ICpyYiA9IHVyYi0+Y29udGV4dDsKIAlzdHJ1Y3QgYWNtICphY20gPSByYi0+aW5zdGFuY2U7Ci0J dW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAJYm9vbCBz dG9wcGVkID0gZmFsc2U7CiAJYm9vbCBzdGFsbGVkID0gZmFsc2U7CkBAIC01MjUsMTUgKzUyNCwx MCBAQCBzdGF0aWMgdm9pZCBhY21fcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikK IAkJcmV0dXJuOwogCX0KIAotCS8qIHRocm90dGxlIGRldmljZSBpZiByZXF1ZXN0ZWQgYnkgdHR5 ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JYWNtLT50 aHJvdHRsZWQgPSBhY20tPnRocm90dGxlX3JlcTsKLQlpZiAoIWFjbS0+dGhyb3R0bGVkKSB7Ci0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JCWFjbV9z dWJtaXRfcmVhZF91cmIoYWNtLCByYi0+aW5kZXgsIEdGUF9BVE9NSUMpOwotCX0gZWxzZSB7Ci0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+cmVhZF9sb2NrLCBmbGFncyk7Ci0JfQorCWlm ICh0ZXN0X2JpdChBQ01fVEhST1RUTEVELCAmYWNtLT5mbGFncykpCisJCXJldHVybjsKKworCWFj bV9zdWJtaXRfcmVhZF91cmIoYWNtLCByYi0+aW5kZXgsIEdGUF9BVE9NSUMpOwogfQogCiAvKiBk YXRhIGludGVyZmFjZSB3cm90ZSB0aG9zZSBvdXRnb2luZyBieXRlcyAqLwpAQCAtNjcwLDEwICs2 NjQsNyBAQCBzdGF0aWMgaW50IGFjbV9wb3J0X2FjdGl2YXRlKHN0cnVjdCB0dHlfcG9ydCAqcG9y dCwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIAkvKgogCSAqIFVudGhyb3R0bGUgZGV2aWNlIGlu IGNhc2UgdGhlIFRUWSB3YXMgY2xvc2VkIHdoaWxlIHRocm90dGxlZC4KIAkgKi8KLQlzcGluX2xv Y2tfaXJxKCZhY20tPnJlYWRfbG9jayk7Ci0JYWNtLT50aHJvdHRsZWQgPSAwOwotCWFjbS0+dGhy b3R0bGVfcmVxID0gMDsKLQlzcGluX3VubG9ja19pcnEoJmFjbS0+cmVhZF9sb2NrKTsKKwljbGVh cl9iaXQoQUNNX1RIUk9UVExFRCwgJmFjbS0+ZmxhZ3MpOwogCiAJcmV0dmFsID0gYWNtX3N1Ym1p dF9yZWFkX3VyYnMoYWNtLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsKQpAQCAtODQxLDI3ICs4 MzIsMTkgQEAgc3RhdGljIHZvaWQgYWNtX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5KQogewogCXN0cnVjdCBhY20gKmFjbSA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAKLQlzcGluX2xv Y2tfaXJxKCZhY20tPnJlYWRfbG9jayk7Ci0JYWNtLT50aHJvdHRsZV9yZXEgPSAxOwotCXNwaW5f dW5sb2NrX2lycSgmYWNtLT5yZWFkX2xvY2spOworCXNldF9iaXQoQUNNX1RIUk9UVExFRCwgJmFj bS0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBhY21fdHR5X3VudGhyb3R0bGUoc3RydWN0IHR0 eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgYWNtICphY20gPSB0dHktPmRyaXZlcl9kYXRhOwot CXVuc2lnbmVkIGludCB3YXNfdGhyb3R0bGVkOwogCi0Jc3Bpbl9sb2NrX2lycSgmYWNtLT5yZWFk X2xvY2spOwotCXdhc190aHJvdHRsZWQgPSBhY20tPnRocm90dGxlZDsKLQlhY20tPnRocm90dGxl ZCA9IDA7Ci0JYWNtLT50aHJvdHRsZV9yZXEgPSAwOwotCXNwaW5fdW5sb2NrX2lycSgmYWNtLT5y ZWFkX2xvY2spOworCWNsZWFyX2JpdChBQ01fVEhST1RUTEVELCAmYWNtLT5mbGFncyk7CiAKIAkv KiBNYXRjaGVzIHRoZSBzbXBfbWJfX2FmdGVyX2F0b21pYygpIGluIGFjbV9yZWFkX2J1bGtfY2Fs bGJhY2soKS4gKi8KIAlzbXBfbWIoKTsKIAotCWlmICh3YXNfdGhyb3R0bGVkKQotCQlhY21fc3Vi bWl0X3JlYWRfdXJicyhhY20sIEdGUF9LRVJORUwpOworCWFjbV9zdWJtaXRfcmVhZF91cmJzKGFj bSwgR0ZQX0tFUk5FTCk7CiB9CiAKIHN0YXRpYyBpbnQgYWNtX3R0eV9icmVha19jdGwoc3RydWN0 IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IHN0YXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xh c3MvY2RjLWFjbS5oIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCmluZGV4IDUxNWFhZDA4 NDdlZS4uY2ExYzAyNjM4MmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNt LmgKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCkBAIC0xMDgsNiArMTA4LDcgQEAg c3RydWN0IGFjbSB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKICMJCWRlZmluZSBFVkVOVF9UVFlf V0FLRVVQCTAKICMJCWRlZmluZSBFVkVOVF9SWF9TVEFMTAkxCisjCQlkZWZpbmUgQUNNX1RIUk9U VExFRAkyCiAJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgbGluZTsJCS8qIGJpdHMsIHN0b3As IHBhcml0eSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJCS8qIHdvcmsgcXVldWUgZW50 cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KIAl1bnNpZ25lZCBpbnQgY3RybGlu OwkJCQkvKiBpbnB1dCBjb250cm9sIGxpbmVzIChEQ0QsIERTUiwgUkksIGJyZWFrLCBvdmVycnVu cykgKi8KQEAgLTEyMiw4ICsxMjMsNiBAQCBzdHJ1Y3QgYWNtIHsKIAl1bnNpZ25lZCBpbnQgY3Ry bF9jYXBzOwkJCQkvKiBjb250cm9sIGNhcGFiaWxpdGllcyBmcm9tIHRoZSBjbGFzcyBzcGVjaWZp YyBoZWFkZXIgKi8KIAl1bnNpZ25lZCBpbnQgc3VzcF9jb3VudDsJCQkvKiBudW1iZXIgb2Ygc3Vz cGVuZGVkIGludGVyZmFjZXMgKi8KIAl1bnNpZ25lZCBpbnQgY29tYmluZWRfaW50ZXJmYWNlczox OwkJLyogY29udHJvbCBhbmQgZGF0YSBjb2xsYXBzZWQgKi8KLQl1bnNpZ25lZCBpbnQgdGhyb3R0 bGVkOjE7CQkJLyogYWN0dWFsbHkgdGhyb3R0bGVkICovCi0JdW5zaWduZWQgaW50IHRocm90dGxl X3JlcToxOwkJCS8qIHRocm90dGxlIHJlcXVlc3RlZCAqLwogCXU4IGJJbnRlcnZhbDsKIAlzdHJ1 Y3QgdXNiX2FuY2hvciBkZWxheWVkOwkJCS8qIHdyaXRlcyBxdWV1ZWQgZm9yIGEgZGV2aWNlIGFi b3V0IHRvIGJlIHdva2VuICovCiAJdW5zaWduZWQgbG9uZyBxdWlya3M7Cg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS, T_DKIMWL_WL_HIGH,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 66F7AC43219 for ; Thu, 25 Apr 2019 16:06:04 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AE61E2088F for ; Thu, 25 Apr 2019 16:06:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556208364; bh=gOBgAvrGs36c+m4K79C8LadHIZyXWDmeQTI6yBpmHcA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=emD0H4mfL9zxjFIl8Iatu0vjPlffyFgfaVmDC8UDSvSCg2tKwSHfIP2BpdcLJSLz5 thiWGk/lPWjsZJ/nyT0OOubhbMJz1xkEiTV8rIpSCwdho3az1B8DITz2hIYk8sARUG 7gXYitdDRZK+BMUpa5tZm14WidZWDxowWn/7AJKo= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726402AbfDYQGD (ORCPT ); Thu, 25 Apr 2019 12:06:03 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:39346 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726859AbfDYQGC (ORCPT ); Thu, 25 Apr 2019 12:06:02 -0400 Received: by mail-lf1-f66.google.com with SMTP id d12so180212lfk.6 for ; Thu, 25 Apr 2019 09:06:00 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jCrLocsed8C23l/Qz2ceGAv+q7KSLARapoD49XZWHrQ=; b=iovlPOjODV4vxWQrn3RW2HU+TJP6scdGSFr/OpDMux3KrA0s+ZGzOZN7qsTvLu3JeW s40nan/Uv9ze5IVzOkaslSRrDAAOc1N2dxFdSvfVwvQM8hzfCoOYw864IQnI++2CloyQ Shcnb71nK0p2H3HbY4pacmY0WJXhF0xCwAAHyKYgVecVjSIzZK5JnScYwQ3vYLbA03zs 8cEGJq9FVSLvW2ihOl7mMCuwctbeqi2d1YVmvOZv6BYfOyiGtqGaURv1xmf/rVkdv2KI LZpCjpzgVFe+RpbqmkXbWqJpAVjiNwWcXRyy3YYFakGP1+q6F05+qxXLyuaNE6gLQHfT stYQ== X-Gm-Message-State: APjAAAWVUFF2h7QTYkvpqdnDIxBEQlCFwyMuVs+KbU0GJkxuNBZBXy3Z brGUBCiiq1tN2ePiEVqtQZs= X-Google-Smtp-Source: APXvYqzsI6XUtV5eu1qIxgC62mhxzk54ojfu5u/J12gYUrY1ZvdurG1U4EaGK6nxAwIUMe60LA+Nqg== X-Received: by 2002:ac2:558d:: with SMTP id v13mr14895265lfg.76.1556208359981; Thu, 25 Apr 2019 09:05:59 -0700 (PDT) Received: from xi.terra (c-74bee655.07-184-6d6c6d4.bbcust.telenor.se. [85.230.190.116]) by smtp.gmail.com with ESMTPSA id l16sm4733160ljb.24.2019.04.25.09.05.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Apr 2019 09:05:57 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.91) (envelope-from ) id 1hJgsl-0002d3-UK; Thu, 25 Apr 2019 18:05:55 +0200 From: Johan Hovold To: Alan Stern , Oliver Neukum , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, Johan Hovold Subject: [PATCH 5/5] USB: cdc-acm: clean up throttle handling Date: Thu, 25 Apr 2019 18:05:40 +0200 Message-Id: <20190425160540.10036-6-johan@kernel.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190425160540.10036-1-johan@kernel.org> References: <20190425160540.10036-1-johan@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Message-ID: <20190425160540.2RkjxLSb7ydhrd8t0-typaBnS4-ITdK6aQEcUZmaBSc@z> Clean up the throttle implementation by dropping the redundant throttle_req flag which was a remnant from back when USB serial had only a single read URB, something which was later carried over to cdc-acm. Also convert the throttled flag to an atomic bit flag. Signed-off-by: Johan Hovold --- drivers/usb/class/cdc-acm.c | 33 ++++++++------------------------- drivers/usb/class/cdc-acm.h | 3 +-- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index c03aa8550980..183b41753c98 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -468,7 +468,6 @@ static void acm_read_bulk_callback(struct urb *urb) { struct acm_rb *rb = urb->context; struct acm *acm = rb->instance; - unsigned long flags; int status = urb->status; bool stopped = false; bool stalled = false; @@ -525,15 +524,10 @@ static void acm_read_bulk_callback(struct urb *urb) return; } - /* throttle device if requested by tty */ - spin_lock_irqsave(&acm->read_lock, flags); - acm->throttled = acm->throttle_req; - if (!acm->throttled) { - spin_unlock_irqrestore(&acm->read_lock, flags); - acm_submit_read_urb(acm, rb->index, GFP_ATOMIC); - } else { - spin_unlock_irqrestore(&acm->read_lock, flags); - } + if (test_bit(ACM_THROTTLED, &acm->flags)) + return; + + acm_submit_read_urb(acm, rb->index, GFP_ATOMIC); } /* data interface wrote those outgoing bytes */ @@ -670,10 +664,7 @@ static int acm_port_activate(struct tty_port *port, struct tty_struct *tty) /* * Unthrottle device in case the TTY was closed while throttled. */ - spin_lock_irq(&acm->read_lock); - acm->throttled = 0; - acm->throttle_req = 0; - spin_unlock_irq(&acm->read_lock); + clear_bit(ACM_THROTTLED, &acm->flags); retval = acm_submit_read_urbs(acm, GFP_KERNEL); if (retval) @@ -841,27 +832,19 @@ static void acm_tty_throttle(struct tty_struct *tty) { struct acm *acm = tty->driver_data; - spin_lock_irq(&acm->read_lock); - acm->throttle_req = 1; - spin_unlock_irq(&acm->read_lock); + set_bit(ACM_THROTTLED, &acm->flags); } static void acm_tty_unthrottle(struct tty_struct *tty) { struct acm *acm = tty->driver_data; - unsigned int was_throttled; - spin_lock_irq(&acm->read_lock); - was_throttled = acm->throttled; - acm->throttled = 0; - acm->throttle_req = 0; - spin_unlock_irq(&acm->read_lock); + clear_bit(ACM_THROTTLED, &acm->flags); /* Matches the smp_mb__after_atomic() in acm_read_bulk_callback(). */ smp_mb(); - if (was_throttled) - acm_submit_read_urbs(acm, GFP_KERNEL); + acm_submit_read_urbs(acm, GFP_KERNEL); } static int acm_tty_break_ctl(struct tty_struct *tty, int state) diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h index 515aad0847ee..ca1c026382c2 100644 --- a/drivers/usb/class/cdc-acm.h +++ b/drivers/usb/class/cdc-acm.h @@ -108,6 +108,7 @@ struct acm { unsigned long flags; # define EVENT_TTY_WAKEUP 0 # define EVENT_RX_STALL 1 +# define ACM_THROTTLED 2 struct usb_cdc_line_coding line; /* bits, stop, parity */ struct work_struct work; /* work queue entry for line discipline waking up */ unsigned int ctrlin; /* input control lines (DCD, DSR, RI, break, overruns) */ @@ -122,8 +123,6 @@ struct acm { unsigned int ctrl_caps; /* control capabilities from the class specific header */ unsigned int susp_count; /* number of suspended interfaces */ unsigned int combined_interfaces:1; /* control and data collapsed */ - unsigned int throttled:1; /* actually throttled */ - unsigned int throttle_req:1; /* throttle requested */ u8 bInterval; struct usb_anchor delayed; /* writes queued for a device about to be woken */ unsigned long quirks; -- 2.21.0