On Mon, Apr 14, 2014 at 01:53:33PM +0100, One Thousand Gnomes wrote: > On Fri, 11 Apr 2014 11:41:24 +0200 > Johan Hovold <jhovold@xxxxxxxxx> wrote: > > > Fix characters being dropped by n_tty_write() due to a failure to > > check the return value of tty_put_char() in do_output_char(). > > > > Characters are currently being dropped by write if a tty driver claims > > to have write room available, but still fails to buffer any data > > Your driver is buggy. If you advertise a buffer you must honour it and > neither shrink nor revoke it. Very well, that settles the question. > For an URB based device you almost certainly want internal buffering so > you can do proper packetisation. USB serial these days gets it right - see > drivers/usb/serial/generic.c for a fairly simple kfifo based approach. I'm quite aware of the usb-serial approach as I implemented it. ;) I have considered "porting" it to the ACM driver, and unless anyone is against the extra copy the fifo would imply, I'll go ahead and do just that (although, I know of at least one buggy ACM device that violates the ACM specification and cannot handle merged writes...). > Whether applying it to cdc_acm would make sense I don't know but it looks > like it might be simpler over-all than the current arrangement. With the current fifo-less implementation, the ACM driver could use the approach taken by the usb-wwan and sierra usb-serial drivers, which queue up all there write urbs while suspended. That way the available buffer space never shrinks. Thanks, Johan -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html