Skip to content

Commit

Permalink
n_tty: Only flush echo output if actually output
Browse files Browse the repository at this point in the history
Don't have the driver flush received echoes if no echoes were
actually output.

Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Peter Hurley authored and Greg Kroah-Hartman committed Jul 24, 2013
1 parent cbfd034 commit bc5b1ec
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions drivers/tty/n_tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -646,14 +646,14 @@ static ssize_t process_output_block(struct tty_struct *tty,
* Locking: callers must hold output_lock
*/

static void __process_echoes(struct tty_struct *tty)
static size_t __process_echoes(struct tty_struct *tty)
{
struct n_tty_data *ldata = tty->disc_data;
int space, nr;
int space, old_space;
size_t tail;
unsigned char c;

space = tty_write_room(tty);
old_space = space = tty_write_room(tty);

tail = ldata->echo_tail;
nr = ldata->echo_commit - ldata->echo_tail;
Expand Down Expand Up @@ -785,12 +785,13 @@ static void __process_echoes(struct tty_struct *tty)
}

ldata->echo_tail = tail;
return old_space - space;
}

static void commit_echoes(struct tty_struct *tty)
{
struct n_tty_data *ldata = tty->disc_data;
size_t nr, old;
size_t nr, old, echoed;
size_t head;

head = ldata->echo_head;
Expand All @@ -805,25 +806,26 @@ static void commit_echoes(struct tty_struct *tty)

mutex_lock(&ldata->output_lock);
ldata->echo_commit = head;
__process_echoes(tty);
echoed = __process_echoes(tty);
mutex_unlock(&ldata->output_lock);

if (tty->ops->flush_chars)
if (echoed && tty->ops->flush_chars)
tty->ops->flush_chars(tty);
}

static void process_echoes(struct tty_struct *tty)
{
struct n_tty_data *ldata = tty->disc_data;
size_t echoed;

if (!L_ECHO(tty) || ldata->echo_commit == ldata->echo_tail)
return;

mutex_lock(&ldata->output_lock);
__process_echoes(tty);
echoed = __process_echoes(tty);
mutex_unlock(&ldata->output_lock);

if (tty->ops->flush_chars)
if (echoed && tty->ops->flush_chars)
tty->ops->flush_chars(tty);
}

Expand Down

0 comments on commit bc5b1ec

Please sign in to comment.