--- linux-2.6.10/drivers/serial/au1x00_uart.c 2004-12-31 10:16:15.000000000 +0300 +++ linux-2.6.10/drivers/serial/au1x00_uart.c 2005-02-07 15:42:42.000000000 +0300 @@ -320,7 +320,9 @@ ignore_char: *status = serial_inp(up, UART_LSR); } while ((*status & UART_LSR_DR) && (max_count-- > 0)); + spin_unlock(&up->port.lock); tty_flip_buffer_push(tty); + spin_lock(&up->port.lock); } static _INLINE_ void transmit_chars(struct uart_8250_port *up) --- linux-2.6.10/drivers/serial/8250.c 2005-02-07 13:47:57.000000000 +0300 +++ linux-2.6.10/drivers/serial/8250.c 2005-02-07 15:43:47.000000000 +0300 @@ -1059,7 +1059,9 @@ ignore_char: lsr = serial_inp(up, UART_LSR); } while ((lsr & UART_LSR_DR) && (max_count-- > 0)); + spin_unlock(&up->port.lock); tty_flip_buffer_push(tty); + spin_lock(&up->port.lock); *status = lsr; }