* [PATCH] 8250 receive lockup fix
@ 2004-10-08 21:02 Paul Fulghum
0 siblings, 0 replies; only message in thread
From: Paul Fulghum @ 2004-10-08 21:02 UTC (permalink / raw)
To: Andrew Morton; +Cc: linux-kernel
Fix lockup caused by 8520 serial driver not clearing
receive interrupt if flip buffer becomes full.
Signed-off-by: Paul Fulghum <paulkf@microgate.com>
--- linux-2.6.9-rc3-mm3/drivers/serial/8250.c 2004-10-08 15:51:04.000000000 -0500
+++ bluedillo/drivers/serial/8250.c 2004-10-08 15:51:44.000000000 -0500
@@ -872,8 +872,19 @@ receive_chars(struct uart_8250_port *up,
do {
if (unlikely(tty->flip.count >= TTY_FLIPBUF_SIZE)) {
tty->flip.work.func((void *)tty);
- if (tty->flip.count >= TTY_FLIPBUF_SIZE)
+ if (tty->flip.count >= TTY_FLIPBUF_SIZE) {
+ /* no room in flip buffer, discard rx FIFO contents to clear IRQ
+ * *FIXME* Hardware with auto flow control
+ * would benefit from leaving the data in the FIFO and
+ * disabling the rx IRQ until space becomes available.
+ */
+ do {
+ serial_inp(up, UART_RX);
+ up->port.icount.overrun++;
+ *status = serial_inp(up, UART_LSR);
+ } while ((*status & UART_LSR_DR) && (max_count-- > 0));
return; /* if TTY_DONT_FLIP is set */
+ }
}
ch = serial_inp(up, UART_RX);
*tty->flip.char_buf_ptr = ch;
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-10-08 21:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-10-08 21:02 [PATCH] 8250 receive lockup fix Paul Fulghum
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.