···198 if (uart_handle_sysrq_char(port, ch, regs))199 goto ignore_char;200201- if ((rsr & port->ignore_status_mask) == 0) {202- tty_insert_flip_char(tty, ch, flag);203- }204- if ((rsr & UART01x_RSR_OE) &&205- tty->flip.count < TTY_FLIPBUF_SIZE) {206- /*207- * Overrun is special, since it's reported208- * immediately, and doesn't affect the current209- * character210- */211- tty_insert_flip_char(tty, 0, TTY_OVERRUN);212- }213 ignore_char:214 status = UART_GET_FR(port);215 }
···198 if (uart_handle_sysrq_char(port, ch, regs))199 goto ignore_char;200201+ uart_insert_char(port, rsr, UART01x_RSR_OE, ch, flag);202+0000000000203 ignore_char:204 status = UART_GET_FR(port);205 }
+2-12
drivers/serial/amba-pl011.c
···163 if (uart_handle_sysrq_char(&uap->port, ch, regs))164 goto ignore_char;165166- if ((rsr & uap->port.ignore_status_mask) == 0) {167- tty_insert_flip_char(tty, ch, flag);168- }169- if ((rsr & UART01x_RSR_OE) &&170- tty->flip.count < TTY_FLIPBUF_SIZE) {171- /*172- * Overrun is special, since it's reported173- * immediately, and doesn't affect the current174- * character175- */176- tty_insert_flip_char(tty, 0, TTY_OVERRUN);177- }178 ignore_char:179 status = readw(uap->port.membase + UART01x_FR);180 }
···163 if (uart_handle_sysrq_char(&uap->port, ch, regs))164 goto ignore_char;165166+ uart_insert_char(&uap->port, rsr, UART01x_RSR_OE, ch, flag);167+0000000000168 ignore_char:169 status = readw(uap->port.membase + UART01x_FR);170 }
+1-4
drivers/serial/clps711x.c
···143 * CHECK: does overrun affect the current character?144 * ASSUMPTION: it does not.145 */146- if ((ch & port->ignore_status_mask & ~RXSTAT_OVERRUN) == 0)147- tty_insert_flip_char(tty, ch, flg);148- if ((ch & ~port->ignore_status_mask & RXSTAT_OVERRUN) == 0)149- tty_insert_flip_char(tty, 0, TTY_OVERRUN);150151 ignore_char:152 status = clps_readl(SYSFLG(port));
···143 * CHECK: does overrun affect the current character?144 * ASSUMPTION: it does not.145 */146+ uart_insert_char(port, ch, UARTDR_OVERR, ch, flg);000147148 ignore_char:149 status = clps_readl(SYSFLG(port));
+4-12
drivers/serial/pxa.c
···161 else if (*status & UART_LSR_FE)162 flag = TTY_FRAME;163 }0164 if (uart_handle_sysrq_char(&up->port, ch, regs))165 goto ignore_char;166- if ((*status & up->port.ignore_status_mask) == 0) {167- tty_insert_flip_char(tty, ch, flag);168- }169- if ((*status & UART_LSR_OE) &&170- tty->flip.count < TTY_FLIPBUF_SIZE) {171- /*172- * Overrun is special, since it's reported173- * immediately, and doesn't affect the current174- * character.175- */176- tty_insert_flip_char(tty, 0, TTY_OVERRUN);177- }178 ignore_char:179 *status = serial_in(up, UART_LSR);180 } while ((*status & UART_LSR_DR) && (max_count-- > 0));
···161 else if (*status & UART_LSR_FE)162 flag = TTY_FRAME;163 }164+165 if (uart_handle_sysrq_char(&up->port, ch, regs))166 goto ignore_char;167+168+ uart_insert_char(&up->port, *status, UART_LSR_OE, ch, flag);169+000000000170 ignore_char:171 *status = serial_in(up, UART_LSR);172 } while ((*status & UART_LSR_DR) && (max_count-- > 0));
+1-14
drivers/serial/s3c2410.c
···394 if (uart_handle_sysrq_char(port, ch, regs))395 goto ignore_char;396397- if ((uerstat & port->ignore_status_mask) == 0) {398- tty_insert_flip_char(tty, ch, flag);399- }400-401- if ((uerstat & S3C2410_UERSTAT_OVERRUN) &&402- tty->flip.count < TTY_FLIPBUF_SIZE) {403- /*404- * Overrun is special, since it's reported405- * immediately, and doesn't affect the current406- * character.407- */408-409- tty_insert_flip_char(tty, 0, TTY_OVERRUN);410- }411412 ignore_char:413 continue;
···479 }480}4810000000000000000000482/*483 * UART_ENABLE_MS - determine if port should enable modem status irqs484 */
···479 }480}481482+#include <linux/tty_flip.h>483+484+static inline void485+uart_insert_char(struct uart_port *port, unsigned int status,486+ unsigned int overrun, unsigned int ch, unsigned int flag)487+{488+ struct tty_struct *tty = port->info->tty;489+490+ if ((status & port->ignore_status_mask & ~overrun) == 0)491+ tty_insert_flip_char(tty, ch, flag);492+493+ /*494+ * Overrun is special. Since it's reported immediately,495+ * it doesn't affect the current character.496+ */497+ if (status & ~port->ignore_status_mask & overrun)498+ tty_insert_flip_char(tty, 0, TTY_OVERRUN);499+}500+501/*502 * UART_ENABLE_MS - determine if port should enable modem status irqs503 */