From: Johan Hovold <jhovold@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Peter Hurley <peter@hurleysoftware.com>,
Stas Sergeev <stsp@list.ru>,
Jarkko Huijts <jarkko.huijts@gmail.com>,
Alan Cox <alan@linux.intel.com>,
linux-usb@vger.kernel.org, linux-serial@vger.kernel.org,
linux-kernel@vger.kernel.org, Caylan Van Larson <i@caylan.net>,
"Rafael J. Wysocki" <rjw@sisk.pl>,
Johan Hovold <jhovold@gmail.com>
Subject: [PATCH 6/7] USB: ti_usb_3410_5052: fix chars_in_buffer overhead
Date: Sun, 5 May 2013 20:32:32 +0200 [thread overview]
Message-ID: <1367778753-22297-7-git-send-email-jhovold@gmail.com> (raw)
In-Reply-To: <1367778753-22297-1-git-send-email-jhovold@gmail.com>
Use the new generic usb-serial wait_until_sent implementation to wait
for hardware buffers to drain.
This removes the need to check the hardware buffers in chars_in_buffer
and thus removes the overhead introduced by commit 2c992cd73 ("USB:
ti_usb_3410_5052: query hardware-buffer status in chars_in_buffer")
without breaking tty_wait_until_sent (used by, for example, tcdrain,
tcsendbreak and close).
Signed-off-by: Johan Hovold <jhovold@gmail.com>
---
drivers/usb/serial/ti_usb_3410_5052.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c
index cac47ae..c92c5ed 100644
--- a/drivers/usb/serial/ti_usb_3410_5052.c
+++ b/drivers/usb/serial/ti_usb_3410_5052.c
@@ -101,6 +101,7 @@ static int ti_write(struct tty_struct *tty, struct usb_serial_port *port,
const unsigned char *data, int count);
static int ti_write_room(struct tty_struct *tty);
static int ti_chars_in_buffer(struct tty_struct *tty);
+static bool ti_tx_empty(struct usb_serial_port *port);
static void ti_throttle(struct tty_struct *tty);
static void ti_unthrottle(struct tty_struct *tty);
static int ti_ioctl(struct tty_struct *tty,
@@ -222,6 +223,7 @@ static struct usb_serial_driver ti_1port_device = {
.write = ti_write,
.write_room = ti_write_room,
.chars_in_buffer = ti_chars_in_buffer,
+ .tx_empty = ti_tx_empty,
.throttle = ti_throttle,
.unthrottle = ti_unthrottle,
.ioctl = ti_ioctl,
@@ -253,6 +255,7 @@ static struct usb_serial_driver ti_2port_device = {
.write = ti_write,
.write_room = ti_write_room,
.chars_in_buffer = ti_chars_in_buffer,
+ .tx_empty = ti_tx_empty,
.throttle = ti_throttle,
.unthrottle = ti_unthrottle,
.ioctl = ti_ioctl,
@@ -684,8 +687,6 @@ static int ti_chars_in_buffer(struct tty_struct *tty)
struct ti_port *tport = usb_get_serial_port_data(port);
int chars = 0;
unsigned long flags;
- int ret;
- u8 lsr;
if (tport == NULL)
return 0;
@@ -694,16 +695,22 @@ static int ti_chars_in_buffer(struct tty_struct *tty)
chars = kfifo_len(&tport->write_fifo);
spin_unlock_irqrestore(&tport->tp_lock, flags);
- if (!chars) {
- ret = ti_get_lsr(tport, &lsr);
- if (!ret && !(lsr & TI_LSR_TX_EMPTY))
- chars = 1;
- }
-
dev_dbg(&port->dev, "%s - returns %d\n", __func__, chars);
return chars;
}
+static bool ti_tx_empty(struct usb_serial_port *port)
+{
+ struct ti_port *tport = usb_get_serial_port_data(port);
+ int ret;
+ u8 lsr;
+
+ ret = ti_get_lsr(tport, &lsr);
+ if (!ret && !(lsr & TI_LSR_TX_EMPTY))
+ return false;
+
+ return true;
+}
static void ti_throttle(struct tty_struct *tty)
{
--
1.8.2.1
next prev parent reply other threads:[~2013-05-05 18:32 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <5183D196.2080305@list.ru>
2013-05-03 16:30 ` Regression: ftdi_sio is slow (since Wed Oct 10 15:05:06 2012) Greg KH
2013-05-03 17:38 ` Stas Sergeev
2013-05-03 16:52 ` Greg KH
2013-05-03 18:05 ` Stas Sergeev
2013-05-03 17:16 ` Greg KH
2013-05-03 18:27 ` Stas Sergeev
2013-05-03 20:34 ` Greg KH
[not found] ` <20130503203419.GA25932-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2013-05-03 21:50 ` Stas Sergeev
2013-05-04 11:15 ` Johan Hovold
2013-05-04 11:39 ` Peter Hurley
2013-05-05 18:29 ` Johan Hovold
2013-05-05 18:32 ` [PATCH 0/7] USB: serial: add wait_until_sent-support Johan Hovold
2013-05-05 18:32 ` [PATCH 1/7] USB: serial: add wait_until_sent operation Johan Hovold
[not found] ` <1367778753-22297-1-git-send-email-jhovold-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-05-05 18:32 ` [PATCH 2/7] USB: serial: add generic wait_until_sent implementation Johan Hovold
2013-05-08 14:25 ` Stas Sergeev
2013-05-08 15:48 ` Johan Hovold
2013-05-08 15:51 ` [PATCH v2 2/8] " Johan Hovold
2013-05-05 18:32 ` [PATCH 3/7] USB: ftdi_sio: clean up get_modem_status Johan Hovold
2013-05-05 18:32 ` [PATCH 4/7] USB: ftdi_sio: fix chars_in_buffer overhead Johan Hovold
2013-05-05 18:32 ` [PATCH 5/7] USB: io_ti: " Johan Hovold
2013-05-05 18:32 ` Johan Hovold [this message]
2013-05-05 18:32 ` [PATCH 7/7] USB: serial: clean up chars_in_buffer Johan Hovold
[not found] ` <81D166EE-BB85-4A72-A6FA-A1F6B5633CB0@caylan.net>
2013-05-20 10:07 ` [PATCH 0/7] USB: serial: add wait_until_sent-support Johan Hovold
2013-05-04 12:44 ` Regression: ftdi_sio is slow (since Wed Oct 10 15:05:06 2012) Stas Sergeev
2013-05-04 9:37 ` Stas Sergeev
2013-05-03 18:15 ` Stas Sergeev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1367778753-22297-7-git-send-email-jhovold@gmail.com \
--to=jhovold@gmail.com \
--cc=alan@linux.intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=i@caylan.net \
--cc=jarkko.huijts@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=peter@hurleysoftware.com \
--cc=rjw@sisk.pl \
--cc=stsp@list.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).