lkml.org 
[lkml]   [2013]   [Jun]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 7/9] n_tty: Only flush echo output if actually output
    Date
    Don't have the driver flush received echoes if no echoes were
    actually output.

    Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
    ---
    drivers/tty/n_tty.c | 18 ++++++++++--------
    1 file changed, 10 insertions(+), 8 deletions(-)

    diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
    index f298890..4a2da9e 100644
    --- a/drivers/tty/n_tty.c
    +++ b/drivers/tty/n_tty.c
    @@ -645,14 +645,14 @@ break_out:
    * 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;
    @@ -784,12 +784,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;
    @@ -804,25 +805,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);
    }

    --
    1.8.1.2


    \
     
     \ /
      Last update: 2013-06-15 17:01    [W:4.038 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site