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: [2/5] USB: serial: clean up throttle handling From: Johan Hovold Message-Id: <20190425160540.10036-3-johan@kernel.org> Date: Thu, 25 Apr 2019 18:05:37 +0200 To: Alan Stern , Oliver Neukum , Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org, Johan Hovold List-ID: Q2xlYW4gdXAgdGhlIHRocm90dGxlIGltcGxlbWVudGF0aW9uIGJ5IGRyb3BwaW5nIHRoZSByZWR1 bmRhbnQKdGhyb3R0bGVfcmVxIGZsYWcgd2hpY2ggd2FzIGEgcmVtbmFudCBmcm9tIGJhY2sgd2hl biB0aGVyZSB3YXMgb25seSBhCnNpbmdsZSByZWFkIFVSQi4KCkFsc28gY29udmVydCB0aGUgdGhy b3R0bGVkIGZsYWcgdG8gYW4gYXRvbWljIGJpdCBmbGFnLgoKU2lnbmVkLW9mZi1ieTogSm9oYW4g SG92b2xkIDxqb2hhbkBrZXJuZWwub3JnPgotLS0KIGRyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmlj LmMgfCAzNCArKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbmNsdWRlL2xpbnV4 L3VzYi9zZXJpYWwuaCAgIHwgIDUgKy0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25z KCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2Vu ZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCAwZmZmNDk2OGVhMWIu LjY3Y2VmM2VmMWU1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwor KysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0xMDYsMTIgKzEwNiw4IEBAIHZv aWQgdXNiX3NlcmlhbF9nZW5lcmljX2RlcmVnaXN0ZXIodm9pZCkKIGludCB1c2Jfc2VyaWFsX2dl bmVyaWNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0 ICpwb3J0KQogewogCWludCByZXN1bHQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlz cGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCXBvcnQtPnRocm90dGxlZCA9 IDA7Ci0JcG9ydC0+dGhyb3R0bGVfcmVxID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZw b3J0LT5sb2NrLCBmbGFncyk7CisJY2xlYXJfYml0KFVTQl9TRVJJQUxfVEhST1RUTEVELCAmcG9y dC0+ZmxhZ3MpOwogCiAJaWYgKHBvcnQtPmJ1bGtfaW5fc2l6ZSkKIAkJcmVzdWx0ID0gdXNiX3Nl cmlhbF9nZW5lcmljX3N1Ym1pdF9yZWFkX3VyYnMocG9ydCwgR0ZQX0tFUk5FTCk7CkBAIC0zNzUs NyArMzcxLDYgQEAgdm9pZCB1c2Jfc2VyaWFsX2dlbmVyaWNfcmVhZF9idWxrX2NhbGxiYWNrKHN0 cnVjdCB1cmIgKnVyYikKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdXJiLT5j b250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQl1 bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgc3RvcHBlZCA9IGZhbHNlOwogCWludCBzdGF0dXMg PSB1cmItPnN0YXR1czsKIAlpbnQgaTsKQEAgLTQyOSwxNSArNDI0LDEwIEBAIHZvaWQgdXNiX3Nl cmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCiAJaWYgKHN0 b3BwZWQpCiAJCXJldHVybjsKIAotCS8qIFRocm90dGxlIHRoZSBkZXZpY2UgaWYgcmVxdWVzdGVk IGJ5IHR0eSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0JcG9y dC0+dGhyb3R0bGVkID0gcG9ydC0+dGhyb3R0bGVfcmVxOwotCWlmICghcG9ydC0+dGhyb3R0bGVk KSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQkJdXNi X3NlcmlhbF9nZW5lcmljX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBpLCBHRlBfQVRPTUlDKTsKLQl9 IGVsc2UgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7Ci0J fQorCWlmICh0ZXN0X2JpdChVU0JfU0VSSUFMX1RIUk9UVExFRCwgJnBvcnQtPmZsYWdzKSkKKwkJ cmV0dXJuOworCisJdXNiX3NlcmlhbF9nZW5lcmljX3N1Ym1pdF9yZWFkX3VyYihwb3J0LCBpLCBH RlBfQVRPTUlDKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9zZXJpYWxfZ2VuZXJpY19yZWFk X2J1bGtfY2FsbGJhY2spOwogCkBAIC00ODUsMjMgKzQ3NSwxNiBAQCBFWFBPUlRfU1lNQk9MX0dQ TCh1c2Jfc2VyaWFsX2dlbmVyaWNfd3JpdGVfYnVsa19jYWxsYmFjayk7CiB2b2lkIHVzYl9zZXJp YWxfZ2VuZXJpY190aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1 c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCXBvcnQt PnRocm90dGxlX3JlcSA9IDE7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywg ZmxhZ3MpOworCXNldF9iaXQoVVNCX1NFUklBTF9USFJPVFRMRUQsICZwb3J0LT5mbGFncyk7CiB9 CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2Jfc2VyaWFsX2dlbmVyaWNfdGhyb3R0bGUpOwogCiB2b2lk IHVzYl9zZXJpYWxfZ2VuZXJpY191bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7 CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaW50 IHdhc190aHJvdHRsZWQ7CiAKLQlzcGluX2xvY2tfaXJxKCZwb3J0LT5sb2NrKTsKLQl3YXNfdGhy b3R0bGVkID0gcG9ydC0+dGhyb3R0bGVkOwotCXBvcnQtPnRocm90dGxlZCA9IHBvcnQtPnRocm90 dGxlX3JlcSA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZwb3J0LT5sb2NrKTsKKwljbGVhcl9iaXQo VVNCX1NFUklBTF9USFJPVFRMRUQsICZwb3J0LT5mbGFncyk7CiAKIAkvKgogCSAqIE1hdGNoZXMg dGhlIHNtcF9tYl9fYWZ0ZXJfYXRvbWljKCkgaW4KQEAgLTUwOSw4ICs0OTIsNyBAQCB2b2lkIHVz Yl9zZXJpYWxfZ2VuZXJpY191bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiAJICov CiAJc21wX21iKCk7CiAKLQlpZiAod2FzX3Rocm90dGxlZCkKLQkJdXNiX3NlcmlhbF9nZW5lcmlj X3N1Ym1pdF9yZWFkX3VyYnMocG9ydCwgR0ZQX0tFUk5FTCk7CisJdXNiX3NlcmlhbF9nZW5lcmlj X3N1Ym1pdF9yZWFkX3VyYnMocG9ydCwgR0ZQX0tFUk5FTCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQ TCh1c2Jfc2VyaWFsX2dlbmVyaWNfdW50aHJvdHRsZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUv bGludXgvdXNiL3NlcmlhbC5oIGIvaW5jbHVkZS9saW51eC91c2Ivc2VyaWFsLmgKaW5kZXggMWMx OWY3N2VkNTQxLi5kOGJkYWI4ZjNjMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3Nl cmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0yOCw2ICsyOCw3IEBA CiAKIC8qIFVTQiBzZXJpYWwgZmxhZ3MgKi8KICNkZWZpbmUgVVNCX1NFUklBTF9XUklURV9CVVNZ CTAKKyNkZWZpbmUgVVNCX1NFUklBTF9USFJPVFRMRUQJMQogCiAvKioKICAqIHVzYl9zZXJpYWxf cG9ydDogc3RydWN0dXJlIGZvciB0aGUgc3BlY2lmaWMgcG9ydHMgb2YgYSBkZXZpY2UuCkBAIC02 Nyw4ICs2OCw2IEBACiAgKiBAZmxhZ3M6IHVzYiBzZXJpYWwgcG9ydCBmbGFncwogICogQHdyaXRl X3dhaXQ6IGEgd2FpdF9xdWV1ZV9oZWFkX3QgdXNlZCBieSB0aGUgcG9ydC4KICAqIEB3b3JrOiB3 b3JrIHF1ZXVlIGVudHJ5IGZvciB0aGUgbGluZSBkaXNjaXBsaW5lIHdha2luZyB1cC4KLSAqIEB0 aHJvdHRsZWQ6IG5vbnplcm8gaWYgdGhlIHJlYWQgdXJiIGlzIGluYWN0aXZlIHRvIHRocm90dGxl IHRoZSBkZXZpY2UKLSAqIEB0aHJvdHRsZV9yZXE6IG5vbnplcm8gaWYgdGhlIHR0eSB3YW50cyB0 byB0aHJvdHRsZSB1cwogICogQGRldjogcG9pbnRlciB0byB0aGUgc2VyaWFsIGRldmljZQogICoK ICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgYnkgdGhlIHVzYi1zZXJpYWwgY29yZSBhbmQgZHJp dmVycyBmb3IgdGhlIHNwZWNpZmljCkBAIC0xMTUsOCArMTE0LDYgQEAgc3RydWN0IHVzYl9zZXJp YWxfcG9ydCB7CiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJd2FpdF9xdWV1ZV9oZWFkX3QJd3Jp dGVfd2FpdDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKLQljaGFyCQkJdGhyb3R0bGVkOwot CWNoYXIJCQl0aHJvdHRsZV9yZXE7CiAJdW5zaWduZWQgbG9uZwkJc3lzcnE7IC8qIHN5c3JxIHRp bWVvdXQgKi8KIAlzdHJ1Y3QgZGV2aWNlCQlkZXY7CiB9Owo= 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 CC677C43218 for ; Thu, 25 Apr 2019 16:06:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 1F4212088F for ; Thu, 25 Apr 2019 16:06:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1556208362; bh=OnldwEDCa9Bdn9AaOXVhHn9jv1MkhISIRiZMMVt21hA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:List-ID:From; b=vRnU0wmHdA266kiDAFFs8P+KH04DPMuIb7RL+RbYk7+Farv29W+vYsXEOnl4yNjK8 yeUg8xN6HL7z+p1scdiUeZxmaNNm4UZcXXGi58oJ5dqdRoQX6QrsxOa9EtIVLKpwlu Jy4ZCJp2Nxab3PPGXyuqc8DBUJC1cjSTNtSzlqjo= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726924AbfDYQGA (ORCPT ); Thu, 25 Apr 2019 12:06:00 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:35810 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726058AbfDYQGA (ORCPT ); Thu, 25 Apr 2019 12:06:00 -0400 Received: by mail-lf1-f66.google.com with SMTP id j20so201286lfh.2 for ; Thu, 25 Apr 2019 09:05:58 -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=njCj2//bdeddp1PVnNNWH8PanEmLZ08pHEu90xXrCjg=; b=WB4OYwQd+jbumoHRpWgjHs5re78QB7FmG8Mc+3vNjadtIsTyDbPTaGLt1NkswMMdu7 PxLlOeIlnkDHWYK3q+4G8vZL4B3KIC1/rUJyWZCg0E40K568Zv4D58+SOTvg21P10EPR xdgHT1OZgqzadIDt4n2T67gFCAhAgmlQE8LPtHxdabiF5jV+pmWOFVANPp53dnsyIby9 UHXh+08MSevTzSviD2fZdseEQ4fQmCWX2k+EBGdcwWJk0etBIK92S5DtxnMI2rVYv2CD B9zdc+V2/Z4CQ/DgtI3x/nNqjGLpzPQsb2wMcbTsSwVTnVLjf6DNNzBQmgMHY+P67Mis 0lBA== X-Gm-Message-State: APjAAAXqjrIniGxfSGuhrSjy9xdxuhLLUcy+5dZ33Z66VCRzuMry7DdT qfxeNSVphACt2AmOvRUyBy4= X-Google-Smtp-Source: APXvYqyD8MPhip/tE4oFNK3U/TQBu9W/MSEOvY8jeg3OVNs9cTtxMWfuH1a3cFGpWa8ZZMt8ARkuHQ== X-Received: by 2002:a19:5507:: with SMTP id n7mr10694lfe.140.1556208357892; Thu, 25 Apr 2019 09:05:57 -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 j6sm5863103ljc.0.2019.04.25.09.05.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Apr 2019 09:05:55 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.91) (envelope-from ) id 1hJgsl-0002co-M9; 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 2/5] USB: serial: clean up throttle handling Date: Thu, 25 Apr 2019 18:05:37 +0200 Message-Id: <20190425160540.10036-3-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: <20190425160537.hShxciSxMoKv8X0_CqOsUhLOTgnL00vyHt13NQcLZL0@z> Clean up the throttle implementation by dropping the redundant throttle_req flag which was a remnant from back when there was only a single read URB. Also convert the throttled flag to an atomic bit flag. Signed-off-by: Johan Hovold --- drivers/usb/serial/generic.c | 34 ++++++++-------------------------- include/linux/usb/serial.h | 5 +---- 2 files changed, 9 insertions(+), 30 deletions(-) diff --git a/drivers/usb/serial/generic.c b/drivers/usb/serial/generic.c index 0fff4968ea1b..67cef3ef1e5f 100644 --- a/drivers/usb/serial/generic.c +++ b/drivers/usb/serial/generic.c @@ -106,12 +106,8 @@ void usb_serial_generic_deregister(void) int usb_serial_generic_open(struct tty_struct *tty, struct usb_serial_port *port) { int result = 0; - unsigned long flags; - spin_lock_irqsave(&port->lock, flags); - port->throttled = 0; - port->throttle_req = 0; - spin_unlock_irqrestore(&port->lock, flags); + clear_bit(USB_SERIAL_THROTTLED, &port->flags); if (port->bulk_in_size) result = usb_serial_generic_submit_read_urbs(port, GFP_KERNEL); @@ -375,7 +371,6 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb) { struct usb_serial_port *port = urb->context; unsigned char *data = urb->transfer_buffer; - unsigned long flags; bool stopped = false; int status = urb->status; int i; @@ -429,15 +424,10 @@ void usb_serial_generic_read_bulk_callback(struct urb *urb) if (stopped) return; - /* Throttle the device if requested by tty */ - spin_lock_irqsave(&port->lock, flags); - port->throttled = port->throttle_req; - if (!port->throttled) { - spin_unlock_irqrestore(&port->lock, flags); - usb_serial_generic_submit_read_urb(port, i, GFP_ATOMIC); - } else { - spin_unlock_irqrestore(&port->lock, flags); - } + if (test_bit(USB_SERIAL_THROTTLED, &port->flags)) + return; + + usb_serial_generic_submit_read_urb(port, i, GFP_ATOMIC); } EXPORT_SYMBOL_GPL(usb_serial_generic_read_bulk_callback); @@ -485,23 +475,16 @@ EXPORT_SYMBOL_GPL(usb_serial_generic_write_bulk_callback); void usb_serial_generic_throttle(struct tty_struct *tty) { struct usb_serial_port *port = tty->driver_data; - unsigned long flags; - spin_lock_irqsave(&port->lock, flags); - port->throttle_req = 1; - spin_unlock_irqrestore(&port->lock, flags); + set_bit(USB_SERIAL_THROTTLED, &port->flags); } EXPORT_SYMBOL_GPL(usb_serial_generic_throttle); void usb_serial_generic_unthrottle(struct tty_struct *tty) { struct usb_serial_port *port = tty->driver_data; - int was_throttled; - spin_lock_irq(&port->lock); - was_throttled = port->throttled; - port->throttled = port->throttle_req = 0; - spin_unlock_irq(&port->lock); + clear_bit(USB_SERIAL_THROTTLED, &port->flags); /* * Matches the smp_mb__after_atomic() in @@ -509,8 +492,7 @@ void usb_serial_generic_unthrottle(struct tty_struct *tty) */ smp_mb(); - if (was_throttled) - usb_serial_generic_submit_read_urbs(port, GFP_KERNEL); + usb_serial_generic_submit_read_urbs(port, GFP_KERNEL); } EXPORT_SYMBOL_GPL(usb_serial_generic_unthrottle); diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 1c19f77ed541..d8bdab8f3c26 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h @@ -28,6 +28,7 @@ /* USB serial flags */ #define USB_SERIAL_WRITE_BUSY 0 +#define USB_SERIAL_THROTTLED 1 /** * usb_serial_port: structure for the specific ports of a device. @@ -67,8 +68,6 @@ * @flags: usb serial port flags * @write_wait: a wait_queue_head_t used by the port. * @work: work queue entry for the line discipline waking up. - * @throttled: nonzero if the read urb is inactive to throttle the device - * @throttle_req: nonzero if the tty wants to throttle us * @dev: pointer to the serial device * * This structure is used by the usb-serial core and drivers for the specific @@ -115,8 +114,6 @@ struct usb_serial_port { unsigned long flags; wait_queue_head_t write_wait; struct work_struct work; - char throttled; - char throttle_req; unsigned long sysrq; /* sysrq timeout */ struct device dev; }; -- 2.21.0