Ar Llu, 2006-07-10 am 14:36 +0400, ysgrifennodd Sergei Organov: > However, the problem is easily seen for USB-to-tty drivers where there > are no UARTS anywhere and speeds are rather high so that more than 4096 > bytes (the line discipline buffer size) could be received before a task > has a chance to read from the line discipline buffer, and single flip > size is not limited by the hardware.
There are no flip buffers in 2.6.17, they've gone. The tty buffering is now a proper queuing system. > Moreover, looking into the source code I don't see how tty can take care > not to over-stuff the ldisc. ldisc`s receive_buf() routine doesn't tell > the caller how many chars it actually consumed and silently throws away Not in the current kernel tree. The current tree does this: spin_lock_irqsave(&tty->buf.lock, flags); head = tty->buf.head; if (head != NULL) { tty->buf.head = NULL; for (;;) { int count = head->commit - head->read; if (!count) { if (head->next == NULL) break; tbuf = head; head = head->next; tty_buffer_free(tty, tbuf); continue; } if (!tty->receive_room) { schedule_delayed_work(&tty->buf.work, 1); break; } if (count > tty->receive_room) count = tty->receive_room; char_buf = head->char_buf_ptr + head->read; flag_buf = head->flag_buf_ptr + head->read; head->read += count; spin_unlock_irqrestore(&tty->buf.lock, flags); disc->receive_buf(tty, char_buf, flag_buf, count); spin_lock_irqsave(&tty->buf.lock, flags); } tty->buf.head = head; } spin_unlock_irqrestore(&tty->buf.lock, flags); ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ linux-usb-devel@lists.sourceforge.net To unsubscribe, use the last form field at: https://lists.sourceforge.net/lists/listinfo/linux-usb-devel