serial_core: Update buffer overrun statistics.
authorCorbin Atkinson <corbinat@gmail.com>
Fri, 4 May 2012 17:35:10 +0000 (12:35 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 9 May 2012 21:41:54 +0000 (14:41 -0700)
Currently, serial drivers don't report buffer overruns. When a buffer overrun
occurs, tty_insert_flip_char returns 0, and no attempt is made to insert that
same character again (i.e. it is lost). This patch reports buffer overruns via
the buf_overrun field in the port's icount structure.

Signed-off-by: Corbin Atkinson <corbin.atkinson@ni.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/serial_core.c

index 9c4c05b2825b2a8646a6f6e7709b171cceddb3ba..59fb3ba1e7cace8eec241685c35bf41155e243c7 100644 (file)
@@ -2526,14 +2526,16 @@ void uart_insert_char(struct uart_port *port, unsigned int status,
        struct tty_struct *tty = port->state->port.tty;
 
        if ((status & port->ignore_status_mask & ~overrun) == 0)
-               tty_insert_flip_char(tty, ch, flag);
+               if (tty_insert_flip_char(tty, ch, flag) == 0)
+                       ++port->icount.buf_overrun;
 
        /*
         * Overrun is special.  Since it's reported immediately,
         * it doesn't affect the current character.
         */
        if (status & ~port->ignore_status_mask & overrun)
-               tty_insert_flip_char(tty, 0, TTY_OVERRUN);
+               if (tty_insert_flip_char(tty, 0, TTY_OVERRUN) == 0)
+                       ++port->icount.buf_overrun;
 }
 EXPORT_SYMBOL_GPL(uart_insert_char);
 
This page took 0.026819 seconds and 5 git commands to generate.