linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Peter Hurley <peter@hurleysoftware.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org,
	Jiri Slaby <jslaby@suse.cz>,
	Peter Hurley <peter@hurleysoftware.com>
Subject: [PATCH v2 01/20] n_tty: Fix EOF push handling
Date: Sat, 15 Jun 2013 10:21:17 -0400	[thread overview]
Message-ID: <1371306096-5571-2-git-send-email-peter@hurleysoftware.com> (raw)
In-Reply-To: <1371306096-5571-1-git-send-email-peter@hurleysoftware.com>

In canonical mode, an EOF which is not the first character of the line
causes read() to complete and return the number of characters read so
far (commonly referred to as EOF push). However, if the previous read()
returned because the user buffer was full _and_ the next character
is an EOF not at the beginning of the line, read() must not return 0,
thus mistakenly indicating the end-of-file condition.

The TTY_PUSH flag is used to indicate an EOF was received which is not
at the beginning of the line. Because the EOF push condition is
evaluated by a thread other than the read(), multiple EOF pushes can
cause a premature end-of-file to be indicated.

Instead, discover the 'EOF push as first read character' condition
from the read() thread itself, and restart the i/o loop if detected.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
---
 drivers/tty/n_tty.c  | 34 +++++++++++++++++-----------------
 drivers/tty/tty_io.c |  1 -
 include/linux/tty.h  |  1 -
 3 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index b9ccb49..55e4e38 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -113,6 +113,7 @@ struct n_tty_data {
 
 	/* consumer-published */
 	size_t read_tail;
+	size_t line_start;
 
 	/* protected by output lock */
 	unsigned int column;
@@ -336,6 +337,7 @@ static void reset_buffer_flags(struct n_tty_data *ldata)
 {
 	ldata->read_head = ldata->canon_head = ldata->read_tail = 0;
 	ldata->echo_head = ldata->echo_tail = ldata->echo_commit = 0;
+	ldata->line_start = 0;
 
 	ldata->erasing = 0;
 	bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
@@ -1395,8 +1397,6 @@ send_signal:
 		if (c == EOF_CHAR(tty)) {
 			if (read_cnt(ldata) >= N_TTY_BUF_SIZE)
 				return;
-			if (ldata->canon_head != ldata->read_head)
-				set_bit(TTY_PUSH, &tty->flags);
 			c = __DISABLED_CHAR;
 			goto handle_newline;
 		}
@@ -1603,6 +1603,7 @@ static void n_tty_set_termios(struct tty_struct *tty, struct ktermios *old)
 		canon_change = (old->c_lflag ^ tty->termios.c_lflag) & ICANON;
 	if (canon_change) {
 		bitmap_zero(ldata->read_flags, N_TTY_BUF_SIZE);
+		ldata->line_start = 0;
 		ldata->canon_head = ldata->read_tail;
 		ldata->erasing = 0;
 		ldata->lnext = 0;
@@ -1836,6 +1837,7 @@ static int canon_copy_from_read_buf(struct tty_struct *tty,
 	size_t eol;
 	size_t tail;
 	int ret, found = 0;
+	bool eof_push = 0;
 
 	/* N.B. avoid overrun if nr == 0 */
 	n = min(*nr, read_cnt(ldata));
@@ -1862,8 +1864,10 @@ static int canon_copy_from_read_buf(struct tty_struct *tty,
 	n = (found + eol + size) & (N_TTY_BUF_SIZE - 1);
 	c = n;
 
-	if (found && read_buf(ldata, eol) == __DISABLED_CHAR)
+	if (found && read_buf(ldata, eol) == __DISABLED_CHAR) {
 		n--;
+		eof_push = !n && ldata->read_tail != ldata->line_start;
+	}
 
 	n_tty_trace("%s: eol:%zu found:%d n:%zu c:%zu size:%zu more:%zu\n",
 		    __func__, eol, found, n, c, size, more);
@@ -1886,9 +1890,11 @@ static int canon_copy_from_read_buf(struct tty_struct *tty,
 	smp_mb__after_clear_bit();
 	ldata->read_tail += c;
 
-	if (found)
+	if (found) {
+		ldata->line_start = ldata->read_tail;
 		tty_audit_push(tty);
-	return 0;
+	}
+	return eof_push ? -EAGAIN : 0;
 }
 
 extern ssize_t redirected_tty_write(struct file *, const char __user *,
@@ -1963,12 +1969,10 @@ static ssize_t n_tty_read(struct tty_struct *tty, struct file *file,
 	int c;
 	int minimum, time;
 	ssize_t retval = 0;
-	ssize_t size;
 	long timeout;
 	unsigned long flags;
 	int packet;
 
-do_it_again:
 	c = job_control(tty, file);
 	if (c < 0)
 		return c;
@@ -2075,7 +2079,10 @@ do_it_again:
 
 		if (ldata->icanon && !L_EXTPROC(tty)) {
 			retval = canon_copy_from_read_buf(tty, &b, &nr);
-			if (retval)
+			if (retval == -EAGAIN) {
+				retval = 0;
+				continue;
+			} else if (retval)
 				break;
 		} else {
 			int uncopied;
@@ -2103,15 +2110,8 @@ do_it_again:
 		ldata->minimum_to_wake = minimum;
 
 	__set_current_state(TASK_RUNNING);
-	size = b - buf;
-	if (size) {
-		retval = size;
-		if (nr)
-			clear_bit(TTY_PUSH, &tty->flags);
-	} else if (test_and_clear_bit(TTY_PUSH, &tty->flags)) {
-		up_read(&tty->termios_rwsem);
-		goto do_it_again;
-	}
+	if (b - buf)
+		retval = b - buf;
 
 	n_tty_set_room(tty);
 	up_read(&tty->termios_rwsem);
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 7dbea58..b83c5c5 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -664,7 +664,6 @@ static void __tty_hangup(struct tty_struct *tty, int exit_session)
 
 	spin_lock_irq(&tty->ctrl_lock);
 	clear_bit(TTY_THROTTLED, &tty->flags);
-	clear_bit(TTY_PUSH, &tty->flags);
 	clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
 	put_pid(tty->session);
 	put_pid(tty->pgrp);
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 5fd5d6f..554b732 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -304,7 +304,6 @@ struct tty_file_private {
 #define TTY_EXCLUSIVE 		3	/* Exclusive open mode */
 #define TTY_DEBUG 		4	/* Debugging */
 #define TTY_DO_WRITE_WAKEUP 	5	/* Call write_wakeup after queuing new */
-#define TTY_PUSH 		6	/* n_tty private */
 #define TTY_CLOSING 		7	/* ->close() in progress */
 #define TTY_LDISC_OPEN	 	11	/* Line discipline is open */
 #define TTY_PTY_LOCK 		16	/* pty private */
-- 
1.8.1.2


  reply	other threads:[~2013-06-15 14:22 UTC|newest]

Thread overview: 237+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-19 20:21 [PATCH 00/18] lockless n_tty receive path Peter Hurley
2013-03-19 20:21 ` [PATCH 01/18] tty: Don't change receive_room for ioctl(TIOCSETD) Peter Hurley
2013-03-19 20:21 ` [PATCH 02/18] tty: Make ldisc input flow control concurrency-friendly Peter Hurley
2013-03-19 20:21 ` [PATCH 03/18] tty: Simplify tty buffer/ldisc interface with helper function Peter Hurley
2013-03-19 22:42   ` Ilya Zykov
2013-03-19 23:50     ` Peter Hurley
2013-03-20 12:47       ` Ilya Zykov
2013-03-20 17:20         ` [PATCH] tty: Fix race condition if flushing tty flip buffers Peter Hurley
2013-03-20 17:56           ` Ilya Zykov
2013-04-08 18:48           ` Greg Kroah-Hartman
2013-04-08 20:03             ` Peter Hurley
2013-03-20 17:49         ` [PATCH 03/18] tty: Simplify tty buffer/ldisc interface with helper function Peter Hurley
2013-03-20 19:25           ` Ilya Zykov
2013-03-19 20:21 ` [PATCH 04/18] n_tty: Factor canonical mode copy from n_tty_read() Peter Hurley
2013-03-19 20:21 ` [PATCH 05/18] n_tty: Line copy to user buffer in canonical mode Peter Hurley
2013-03-19 20:21 ` [PATCH 06/18] n_tty: Split n_tty_chars_in_buffer() for reader-only interface Peter Hurley
2013-03-19 20:21 ` [PATCH 07/18] tty: Deprecate ldisc .chars_in_buffer() method Peter Hurley
2013-03-19 20:21 ` [PATCH 08/18] n_tty: Get read_cnt through accessor Peter Hurley
2013-03-19 20:21 ` [PATCH 09/18] n_tty: Don't wrap input buffer indices at buffer size Peter Hurley
2013-03-19 20:21 ` [PATCH 10/18] n_tty: Remove read_cnt Peter Hurley
2013-03-19 20:21 ` [PATCH 11/18] tty: Convert termios_mutex to termios_rwsem Peter Hurley
2013-03-19 20:21 ` [PATCH 12/18] n_tty: Access termios values safely Peter Hurley
2013-03-19 20:21 ` [PATCH 13/18] n_tty: Replace canon_data with index comparison Peter Hurley
2013-03-19 20:21 ` [PATCH 14/18] n_tty: Make N_TTY ldisc receive path lockless Peter Hurley
2013-03-19 20:21 ` [PATCH 15/18] n_tty: Reset lnext if canonical mode changes Peter Hurley
2013-03-19 20:21 ` [PATCH 16/18] n_tty: Fix type mismatches in receive_buf raw copy Peter Hurley
2013-03-19 20:21 ` [PATCH 17/18] n_tty: Don't wait for buffer work in read() loop Peter Hurley
2013-03-19 20:21 ` [PATCH 18/18] n_tty: Separate buffer indices to prevent cache-line sharing Peter Hurley
2013-03-27 11:43 ` [PATCH v2 00/18] lockless n_tty receive path Peter Hurley
2013-03-27 11:43   ` [PATCH v2 01/18] tty: Don't change receive_room for ioctl(TIOCSETD) Peter Hurley
2013-03-27 11:43   ` [PATCH v2 02/18] tty: Make ldisc input flow control concurrency-friendly Peter Hurley
2013-03-27 11:43   ` [PATCH v2 03/18] tty: Simplify tty buffer/ldisc interface with helper function Peter Hurley
2013-03-27 11:43   ` [PATCH v2 04/18] n_tty: Factor canonical mode copy from n_tty_read() Peter Hurley
2013-03-27 11:43   ` [PATCH v2 05/18] n_tty: Line copy to user buffer in canonical mode Peter Hurley
2013-03-27 11:43   ` [PATCH v2 06/18] n_tty: Split n_tty_chars_in_buffer() for reader-only interface Peter Hurley
2013-03-27 11:43   ` [PATCH v2 07/18] tty: Deprecate ldisc .chars_in_buffer() method Peter Hurley
2013-03-27 11:43   ` [PATCH v2 08/18] n_tty: Get read_cnt through accessor Peter Hurley
2013-03-27 11:43   ` [PATCH v2 09/18] n_tty: Don't wrap input buffer indices at buffer size Peter Hurley
2013-03-27 11:44   ` [PATCH v2 10/18] n_tty: Remove read_cnt Peter Hurley
2013-03-27 11:44   ` [PATCH v2 11/18] tty: Convert termios_mutex to termios_rwsem Peter Hurley
2013-03-27 11:44   ` [PATCH v2 12/18] n_tty: Access termios values safely Peter Hurley
2013-03-27 11:44   ` [PATCH v2 13/18] n_tty: Replace canon_data with index comparison Peter Hurley
2013-03-27 11:44   ` [PATCH v2 14/18] n_tty: Make N_TTY ldisc receive path lockless Peter Hurley
2013-03-27 11:44   ` [PATCH v2 15/18] n_tty: Reset lnext if canonical mode changes Peter Hurley
2013-03-27 11:44   ` [PATCH v2 16/18] n_tty: Fix type mismatches in receive_buf raw copy Peter Hurley
2013-03-27 11:44   ` [PATCH v2 17/18] n_tty: Don't wait for buffer work in read() loop Peter Hurley
2013-03-27 11:44   ` [PATCH v2 18/18] n_tty: Separate buffer indices to prevent cache-line sharing Peter Hurley
2013-03-27 11:46   ` [PATCH v2 00/18] lockless n_tty receive path Peter Hurley
2013-04-15 15:19 ` [PATCH v3 00/24] " Peter Hurley
2013-04-15 15:19   ` [PATCH v3 01/24] tty: Don't change receive_room for ioctl(TIOCSETD) Peter Hurley
2013-04-15 15:19   ` [PATCH v3 02/24] tty: Simplify tty buffer/ldisc interface with helper function Peter Hurley
2013-04-15 15:19   ` [PATCH v3 03/24] tty: Make ldisc input flow control concurrency-friendly Peter Hurley
2013-04-15 15:19   ` [PATCH v3 04/24] n_tty: Factor canonical mode copy from n_tty_read() Peter Hurley
2013-04-15 15:19   ` [PATCH v3 05/24] n_tty: Line copy to user buffer in canonical mode Peter Hurley
2013-04-15 15:19   ` [PATCH v3 06/24] n_tty: Split n_tty_chars_in_buffer() for reader-only interface Peter Hurley
2013-04-15 15:19   ` [PATCH v3 07/24] tty: Deprecate ldisc .chars_in_buffer() method Peter Hurley
2013-04-15 15:19   ` [PATCH v3 08/24] n_tty: Get read_cnt through accessor Peter Hurley
2013-04-15 15:19   ` [PATCH v3 09/24] n_tty: Don't wrap input buffer indices at buffer size Peter Hurley
2013-04-15 15:19   ` [PATCH v3 10/24] n_tty: Remove read_cnt Peter Hurley
2013-04-15 15:19   ` [PATCH v3 11/24] tty: Convert termios_mutex to termios_rwsem Peter Hurley
2013-04-15 15:19   ` [PATCH v3 12/24] n_tty: Access termios values safely Peter Hurley
2013-04-15 15:19   ` [PATCH v3 13/24] n_tty: Replace canon_data with index comparison Peter Hurley
2013-04-15 15:19   ` [PATCH v3 14/24] n_tty: Make N_TTY ldisc receive path lockless Peter Hurley
2013-04-15 15:19   ` [PATCH v3 15/24] n_tty: Reset lnext if canonical mode changes Peter Hurley
2013-04-15 15:19   ` [PATCH v3 16/24] n_tty: Fix type mismatches in receive_buf raw copy Peter Hurley
2013-04-15 15:19   ` [PATCH v3 17/24] n_tty: Don't wait for buffer work in read() loop Peter Hurley
2013-04-15 15:19   ` [PATCH v3 18/24] n_tty: Separate buffer indices to prevent cache-line sharing Peter Hurley
2013-04-15 15:19   ` [PATCH v3 19/24] tty: Only guarantee termios read safety for throttle/unthrottle Peter Hurley
2013-04-15 15:19   ` [PATCH v3 20/24] n_tty: Move chars_in_buffer() to factor throttle/unthrottle Peter Hurley
2013-04-15 15:19   ` [PATCH v3 21/24] n_tty: Factor throttle/unthrottle into helper functions Peter Hurley
2013-04-15 15:19   ` [PATCH v3 22/24] n_tty: Move n_tty_write_wakeup() to avoid forward declaration Peter Hurley
2013-04-15 15:19   ` [PATCH v3 23/24] n_tty: Special case pty flow control Peter Hurley
2013-04-15 15:19   ` [PATCH v3 24/24] n_tty: Queue buffer work on any available cpu Peter Hurley
2013-04-15 15:25   ` [PATCH 00/16] lockless tty flip buffers Peter Hurley
2013-04-15 15:25     ` [PATCH 01/16] tty: Compute flip buffer ptrs Peter Hurley
2013-04-15 15:25     ` [PATCH 02/16] tty: Fix flip buffer free list Peter Hurley
2013-04-15 15:25     ` [PATCH 03/16] tty: Factor flip buffer initialization into helper function Peter Hurley
2013-04-15 15:25     ` [PATCH 04/16] tty: Merge tty_buffer_find() into tty_buffer_alloc() Peter Hurley
2013-04-15 15:25     ` [PATCH 05/16] tty: Use generic names for flip buffer list cursors Peter Hurley
2013-04-15 15:25     ` [PATCH 06/16] tty: Use lockless flip buffer free list Peter Hurley
2013-04-15 15:25     ` [PATCH 07/16] tty: Simplify flip buffer list with 0-sized sentinel Peter Hurley
2013-04-15 15:25     ` [PATCH 08/16] tty: Track flip buffer memory limit atomically Peter Hurley
2013-04-15 15:26     ` [PATCH 09/16] tty: Make driver-side flip buffers lockless Peter Hurley
2013-04-15 15:26     ` [PATCH 10/16] tty: Ensure single-threaded flip buffer consumer with mutex Peter Hurley
2013-04-15 15:26     ` [PATCH 11/16] tty: Only perform flip buffer flush from tty_buffer_flush() Peter Hurley
2013-04-15 15:26     ` [PATCH 12/16] tty: Avoid false-sharing flip buffer ptrs Peter Hurley
2013-04-15 15:26     ` [PATCH 13/16] tty: Use non-atomic state to signal flip buffer flush pending Peter Hurley
2013-04-15 15:26     ` [PATCH 14/16] tty: Merge __tty_flush_buffer() into lone call site Peter Hurley
2013-04-15 15:26     ` [PATCH 15/16] tty: Fix unsafe vt paste_selection() Peter Hurley
2013-04-15 15:26     ` [PATCH 16/16] tty: Remove private constant from global namespace Peter Hurley
2013-04-15 15:29     ` [PATCH 0/9] mostly lockless tty echo Peter Hurley
2013-04-15 15:29       ` [PATCH 1/9] n_tty: Remove unused echo_overrun field Peter Hurley
2013-04-15 15:29       ` [PATCH 2/9] n_tty: Use separate head and tail indices for echo_buf Peter Hurley
2013-04-15 15:29       ` [PATCH 3/9] n_tty: Replace echo_cnt with computed value Peter Hurley
2013-04-15 15:29       ` [PATCH 4/9] n_tty: Remove echo_lock Peter Hurley
2013-04-15 15:29       ` [PATCH 5/9] n_tty: Eliminate echo_commit memory barrier Peter Hurley
2013-04-15 15:29       ` [PATCH 6/9] n_tty: Process echoes in blocks Peter Hurley
2013-04-15 15:29       ` [PATCH 7/9] n_tty: Only flush echo output if actually output Peter Hurley
2013-04-15 15:29       ` [PATCH 8/9] n_tty: Eliminate counter in __process_echoes Peter Hurley
2013-04-15 15:29       ` [PATCH 9/9] n_tty: Avoid false-sharing echo buffer indices Peter Hurley
2013-04-15 15:32       ` [PATCH 00/20] streamline per-char receiving Peter Hurley
2013-04-15 15:32         ` [PATCH 01/20] n_tty: Fix EOF push handling Peter Hurley
2013-04-15 15:32         ` [PATCH 02/20] n_tty: Remove alias ptrs in __receive_buf() Peter Hurley
2013-04-15 15:32         ` [PATCH 03/20] n_tty: Move buffers into n_tty_data Peter Hurley
2013-04-15 15:32         ` [PATCH 04/20] n_tty: Rename process_char_map to char_map Peter Hurley
2013-04-15 15:32         ` [PATCH 05/20] n_tty: Simplify __receive_buf loop count Peter Hurley
2013-04-15 15:32         ` [PATCH 06/20] n_tty: Factor 'real raw' receive_buf into standalone fn Peter Hurley
2013-04-15 15:32         ` [PATCH 07/20] n_tty: Factor signal char handling into separate fn Peter Hurley
2013-04-15 15:32         ` [PATCH 08/20] n_tty: Factor flagged " Peter Hurley
2013-04-15 15:32         ` [PATCH 09/20] n_tty: Factor raw mode receive_buf() " Peter Hurley
2013-04-15 15:32         ` [PATCH 10/20] n_tty: Special case EXTPROC receive_buf() as raw mode Peter Hurley
2013-04-15 15:32         ` [PATCH 11/20] n_tty: Factor tty->closing receive_buf() into separate fn Peter Hurley
2013-04-15 15:32         ` [PATCH 12/20] n_tty: Factor standard per-char i/o " Peter Hurley
2013-04-15 15:32         ` [PATCH 13/20] n_tty: Eliminate char tests from IXANY restart test Peter Hurley
2013-04-15 15:32         ` [PATCH 14/20] n_tty: Split n_tty_receive_char() Peter Hurley
2013-04-15 15:32         ` [PATCH 15/20] n_tty: Factor ISTRIP and IUCLC receive_buf into separate fn Peter Hurley
2013-04-15 15:32         ` [PATCH 16/20] n_tty: Factor PARMRK from normal per-char i/o Peter Hurley
2013-04-15 15:32         ` [PATCH 17/20] n_tty: Remove overflow tests from receive_buf() path Peter Hurley
2013-04-15 15:32         ` [PATCH 18/20] n_tty: Un-inline single-use functions Peter Hurley
2013-04-15 15:32         ` [PATCH 19/20] n_tty: Factor LNEXT processing from per-char i/o path Peter Hurley
2013-04-15 15:32         ` [PATCH 20/20] tty: Remove extra wakeup from pty write() path Peter Hurley
2013-04-15 20:14   ` [PATCH v3 00/24] lockless n_tty receive path Greg Kroah-Hartman
2013-04-16 10:15     ` [PATCH 1/7] tty: Add timed, writer-prioritized rw semaphore Peter Hurley
2013-04-16 10:15       ` [PATCH 2/7] tty: Add lock/unlock ldisc pair functions Peter Hurley
2013-05-20 19:34         ` Greg Kroah-Hartman
2013-05-20 21:44           ` Peter Hurley
2013-05-20 23:06             ` Greg Kroah-Hartman
2013-05-20 23:38               ` Peter Hurley
2013-06-03 19:24                 ` Greg Kroah-Hartman
2013-06-15 11:04                   ` [PATCH 0/6] ldsem patchset, reordered and rebased Peter Hurley
2013-06-15 11:04                     ` [PATCH 1/6] tty: Fix tty_ldisc_lock name collision Peter Hurley
2013-06-15 11:04                     ` [PATCH 2/6] tty: Add lock/unlock ldisc pair functions Peter Hurley
2013-06-15 11:04                     ` [PATCH 3/6] tty: Replace ldisc locking with ldisc_sem Peter Hurley
2013-06-15 11:04                     ` [PATCH 4/6] tty: Clarify ldisc variable Peter Hurley
2013-06-15 11:04                     ` [PATCH 5/6] tty: Fix hangup race with TIOCSETD ioctl Peter Hurley
2013-06-15 11:04                     ` [PATCH 6/6] tty: Clarify multiple-references comment in " Peter Hurley
2013-07-23 23:44                     ` [PATCH 0/6] ldsem patchset, reordered and rebased Greg Kroah-Hartman
2013-04-16 10:15       ` [PATCH 3/7] tty: Replace ldisc locking with ldisc_sem Peter Hurley
2013-04-16 10:15       ` [PATCH 4/7] tty: Clarify ldisc variable Peter Hurley
2013-04-16 10:15       ` [PATCH 5/7] tty: Fix hangup race with TIOCSETD ioctl Peter Hurley
2013-04-16 10:15       ` [PATCH 6/7] tty: Clarify multiple-references comment in " Peter Hurley
2013-04-16 10:15       ` [PATCH 7/7] tty: Fix tty_ldisc_lock name collision Peter Hurley
2013-06-15 13:14   ` [PATCH v4 00/24] lockless n_tty receive path Peter Hurley
2013-06-15 13:14     ` [PATCH v4 01/24] tty: Don't change receive_room for ioctl(TIOCSETD) Peter Hurley
2013-06-15 13:14     ` [PATCH v4 02/24] tty: Simplify tty buffer/ldisc interface with helper function Peter Hurley
2013-06-15 13:14     ` [PATCH v4 03/24] tty: Make ldisc input flow control concurrency-friendly Peter Hurley
2013-06-15 13:14     ` [PATCH v4 04/24] n_tty: Factor canonical mode copy from n_tty_read() Peter Hurley
2013-06-15 13:14     ` [PATCH v4 05/24] n_tty: Line copy to user buffer in canonical mode Peter Hurley
2013-06-15 13:14     ` [PATCH v4 06/24] n_tty: Split n_tty_chars_in_buffer() for reader-only interface Peter Hurley
2013-06-15 13:14     ` [PATCH v4 07/24] tty: Deprecate ldisc .chars_in_buffer() method Peter Hurley
2013-06-15 13:14     ` [PATCH v4 08/24] n_tty: Get read_cnt through accessor Peter Hurley
2013-06-15 13:14     ` [PATCH v4 09/24] n_tty: Don't wrap input buffer indices at buffer size Peter Hurley
2013-06-15 13:14     ` [PATCH v4 10/24] n_tty: Remove read_cnt Peter Hurley
2013-06-15 13:14     ` [PATCH v4 11/24] tty: Convert termios_mutex to termios_rwsem Peter Hurley
2013-06-15 13:14     ` [PATCH v4 12/24] n_tty: Access termios values safely Peter Hurley
2013-06-15 13:14     ` [PATCH v4 13/24] n_tty: Replace canon_data with index comparison Peter Hurley
2013-06-15 13:14     ` [PATCH v4 14/24] n_tty: Make N_TTY ldisc receive path lockless Peter Hurley
2013-06-15 13:14     ` [PATCH v4 15/24] n_tty: Reset lnext if canonical mode changes Peter Hurley
2013-06-15 13:14     ` [PATCH v4 16/24] n_tty: Fix type mismatches in receive_buf raw copy Peter Hurley
2013-06-15 13:14     ` [PATCH v4 17/24] n_tty: Don't wait for buffer work in read() loop Peter Hurley
2013-06-15 13:14     ` [PATCH v4 18/24] n_tty: Separate buffer indices to prevent cache-line sharing Peter Hurley
2013-06-15 13:14     ` [PATCH v4 19/24] tty: Only guarantee termios read safety for throttle/unthrottle Peter Hurley
2013-06-15 13:14     ` [PATCH v4 20/24] n_tty: Move chars_in_buffer() to factor throttle/unthrottle Peter Hurley
2013-06-15 13:14     ` [PATCH v4 21/24] n_tty: Factor throttle/unthrottle into helper functions Peter Hurley
2013-06-15 13:14     ` [PATCH v4 22/24] n_tty: Move n_tty_write_wakeup() to avoid forward declaration Peter Hurley
2013-06-15 13:14     ` [PATCH v4 23/24] n_tty: Special case pty flow control Peter Hurley
2013-07-23 12:47       ` [PATCH v5 " Peter Hurley
2013-06-15 13:14     ` [PATCH v4 24/24] n_tty: Queue buffer work on any available cpu Peter Hurley
2013-06-15 13:36     ` [PATCH v2 00/16] lockless tty flip buffers Peter Hurley
2013-06-15 13:36       ` [PATCH v2 01/16] tty: Compute flip buffer ptrs Peter Hurley
2013-06-15 13:36       ` [PATCH v2 02/16] tty: Fix flip buffer free list Peter Hurley
2013-06-15 13:36       ` [PATCH v2 03/16] tty: Factor flip buffer initialization into helper function Peter Hurley
2013-06-15 13:36       ` [PATCH v2 04/16] tty: Merge tty_buffer_find() into tty_buffer_alloc() Peter Hurley
2013-06-15 13:36       ` [PATCH v2 05/16] tty: Use generic names for flip buffer list cursors Peter Hurley
2013-06-15 13:36       ` [PATCH v2 06/16] tty: Use lockless flip buffer free list Peter Hurley
2013-06-15 13:36       ` [PATCH v2 07/16] tty: Simplify flip buffer list with 0-sized sentinel Peter Hurley
2013-06-15 13:36       ` [PATCH v2 08/16] tty: Track flip buffer memory limit atomically Peter Hurley
2013-06-15 13:36       ` [PATCH v2 09/16] tty: Make driver-side flip buffers lockless Peter Hurley
2013-06-15 13:36       ` [PATCH v2 10/16] tty: Ensure single-threaded flip buffer consumer with mutex Peter Hurley
2013-06-15 13:36       ` [PATCH v2 11/16] tty: Only perform flip buffer flush from tty_buffer_flush() Peter Hurley
2013-06-15 13:36       ` [PATCH v2 12/16] tty: Avoid false-sharing flip buffer ptrs Peter Hurley
2013-06-15 13:36       ` [PATCH v2 13/16] tty: Use non-atomic state to signal flip buffer flush pending Peter Hurley
2013-06-15 13:36       ` [PATCH v2 14/16] tty: Merge __tty_flush_buffer() into lone call site Peter Hurley
2013-06-15 13:36       ` [PATCH v2 15/16] tty: Fix unsafe vt paste_selection() Peter Hurley
2013-06-15 13:36       ` [PATCH v2 16/16] tty: Remove private constant from global namespace Peter Hurley
2013-06-15 14:04       ` [PATCH v2 0/9] mostly lockless tty echo Peter Hurley
2013-06-15 14:04         ` [PATCH v2 1/9] n_tty: Remove unused echo_overrun field Peter Hurley
2013-06-15 14:04         ` [PATCH v2 2/9] n_tty: Use separate head and tail indices for echo_buf Peter Hurley
2013-06-15 14:04         ` [PATCH v2 3/9] n_tty: Replace echo_cnt with computed value Peter Hurley
2013-06-15 14:04         ` [PATCH v2 4/9] n_tty: Remove echo_lock Peter Hurley
2013-06-15 14:04         ` [PATCH v2 5/9] n_tty: Eliminate echo_commit memory barrier Peter Hurley
2013-06-15 14:04         ` [PATCH v2 6/9] n_tty: Process echoes in blocks Peter Hurley
2013-07-23 23:53           ` Greg Kroah-Hartman
2013-07-25  1:33             ` Peter Hurley
2013-06-15 14:04         ` [PATCH v2 7/9] n_tty: Only flush echo output if actually output Peter Hurley
2013-06-15 14:04         ` [PATCH v2 8/9] n_tty: Eliminate counter in __process_echoes Peter Hurley
2013-06-15 14:04         ` [PATCH v2 9/9] n_tty: Avoid false-sharing echo buffer indices Peter Hurley
2013-06-15 14:21         ` [PATCH v2 00/20] tty: streamline per-char receiving Peter Hurley
2013-06-15 14:21           ` Peter Hurley [this message]
2013-06-15 14:21           ` [PATCH v2 02/20] n_tty: Remove alias ptrs in __receive_buf() Peter Hurley
2013-06-15 14:21           ` [PATCH v2 03/20] n_tty: Move buffers into n_tty_data Peter Hurley
2013-06-15 14:21           ` [PATCH v2 04/20] n_tty: Rename process_char_map to char_map Peter Hurley
2013-06-15 14:21           ` [PATCH v2 05/20] n_tty: Simplify __receive_buf loop count Peter Hurley
2013-06-15 14:21           ` [PATCH v2 06/20] n_tty: Factor 'real raw' receive_buf into standalone fn Peter Hurley
2013-06-15 14:21           ` [PATCH v2 07/20] n_tty: Factor signal char handling into separate fn Peter Hurley
2013-06-15 14:21           ` [PATCH v2 08/20] n_tty: Factor flagged " Peter Hurley
2013-06-15 14:21           ` [PATCH v2 09/20] n_tty: Factor raw mode receive_buf() " Peter Hurley
2013-06-15 14:21           ` [PATCH v2 10/20] n_tty: Special case EXTPROC receive_buf() as raw mode Peter Hurley
2013-06-15 14:21           ` [PATCH v2 11/20] n_tty: Factor tty->closing receive_buf() into separate fn Peter Hurley
2013-06-15 14:21           ` [PATCH v2 12/20] n_tty: Factor standard per-char i/o " Peter Hurley
2013-07-24  0:12             ` Greg Kroah-Hartman
2013-07-24  0:49               ` Peter Hurley
2013-07-24 12:29               ` [PATCH v3 1/9] " Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 2/9] n_tty: Eliminate char tests from IXANY restart test Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 3/9] n_tty: Split n_tty_receive_char() Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 4/9] n_tty: Factor ISTRIP and IUCLC receive_buf into separate fn Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 5/9] n_tty: Factor PARMRK from normal per-char i/o Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 6/9] n_tty: Remove overflow tests from receive_buf() path Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 7/9] n_tty: Un-inline single-use functions Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 8/9] n_tty: Factor LNEXT processing from per-char i/o path Peter Hurley
2013-07-24 12:29                 ` [PATCH v3 9/9] tty: Remove extra wakeup from pty write() path Peter Hurley
2013-06-15 14:21           ` [PATCH v2 13/20] n_tty: Eliminate char tests from IXANY restart test Peter Hurley
2013-06-15 14:21           ` [PATCH v2 14/20] n_tty: Split n_tty_receive_char() Peter Hurley
2013-06-15 14:21           ` [PATCH v2 15/20] n_tty: Factor ISTRIP and IUCLC receive_buf into separate fn Peter Hurley
2013-06-15 14:21           ` [PATCH v2 16/20] n_tty: Factor PARMRK from normal per-char i/o Peter Hurley
2013-06-15 14:21           ` [PATCH v2 17/20] n_tty: Remove overflow tests from receive_buf() path Peter Hurley
2013-06-15 14:21           ` [PATCH v2 18/20] n_tty: Un-inline single-use functions Peter Hurley
2013-06-15 14:21           ` [PATCH v2 19/20] n_tty: Factor LNEXT processing from per-char i/o path Peter Hurley
2013-06-15 14:21           ` [PATCH v2 20/20] tty: Remove extra wakeup from pty write() path Peter Hurley
2013-07-20 17:00             ` Peter Hurley
2013-07-23 12:57               ` Peter Hurley
2013-07-23 15:02                 ` Greg Kroah-Hartman
2013-07-24  0:04         ` [PATCH v2 0/9] mostly lockless tty echo Greg Kroah-Hartman
2013-07-23 23:53       ` [PATCH v2 00/16] lockless tty flip buffers Greg Kroah-Hartman
2013-06-17 20:01     ` [PATCH v4 00/24] lockless n_tty receive path Greg Kroah-Hartman
2013-06-17 20:32       ` Peter Hurley
2013-07-23 23:44         ` Greg Kroah-Hartman

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=1371306096-5571-2-git-send-email-peter@hurleysoftware.com \
    --to=peter@hurleysoftware.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jslaby@suse.cz \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-serial@vger.kernel.org \
    /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).