Messages in this thread Patch in this message | | | Subject | Re: Serial driver hangs | From | Paul Fulghum <> | Date | Wed, 29 Sep 2004 09:13:33 -0500 |
| |
Here is Roland's change in patch form with added comment. (against 2.4.28-pre3)
Roland: can you test this?
All: Comments?
-- Paul Fulghum paulkf@microgate.com
--- a/drivers/char/serial.c 2004-09-29 09:08:35.000000000 -0500 +++ b/drivers/char/serial.c 2004-09-29 09:09:07.000000000 -0500 @@ -573,8 +573,19 @@ do { if (tty->flip.count >= TTY_FLIPBUF_SIZE) { tty->flip.tqueue.routine((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(info, UART_RX); + icount->overrun++; + *status = serial_inp(info, UART_LSR); + } while ((*status & UART_LSR_DR) && (max_count-- > 0)); return; // if TTY_DONT_FLIP is set + } } ch = serial_inp(info, UART_RX); *tty->flip.char_buf_ptr = ch;
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |