--- linux-2.4.1-orig/drivers/char/serial.c Wed Dec 6 12:06:18 2000 +++ linux/drivers/char/serial.c Thu Feb 1 13:14:05 2001 @@ -569,9 +569,16 @@ icount = &info->state->icount; do { + /* + * Check if flip buffer is full -- if it is, try to flip, + * and if flipping got queued, return immediately + */ + if (tty->flip.count >= TTY_FLIPBUF_SIZE) { + tty->flip.tqueue.routine((void *) tty); + if (tty->flip.count >= TTY_FLIPBUF_SIZE) + return; + } ch = serial_inp(info, UART_RX); - if (tty->flip.count >= TTY_FLIPBUF_SIZE) - goto ignore_char; *tty->flip.char_buf_ptr = ch; icount->rx++;