> ch = inb(port->ioaddr + UART_RX); > - tty_insert_flip_char(tty, ch, 0); > + ret = tty_insert_flip_char(tty, ch, 0); > + if (ret != 1) { > + if (!port->ldisc_stop_rx) > + mxser_stoprx(tty); > + } This can all just go. The tty layer calls down for stop/start events and the flow control handles it. There is enough asynchronous buffering to handle the rest. Just insert them and honour stop/start. By the time tty_insert_flip_char returns 0 you are in an out of memory/64K buffering full *after* being told to stop situation. -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html