--- linux-2.6.9/drivers/serial/8250.c.orig	2008-06-13 11:22:09.035717000 -0700
+++ linux-2.6.9/drivers/serial/8250.c	2008-06-13 11:54:05.006501000 -0700
@@ -893,7 +893,9 @@ receive_chars(struct uart_8250_port *up,
 
 	do {
 		if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) {
+			spin_unlock(&up->port.lock);
 			tty->flip.work.func((void *)tty);
+			spin_lock(&up->port.lock);
 			if (tty->flip.count >= TTY_FLIPBUF_SIZE)
 				return; // if TTY_DONT_FLIP is set
 		}
