Messages in this thread | | | Date | Mon, 14 Apr 2014 15:27:34 +0200 | From | Johan Hovold <> | Subject | Re: [RFC 1/2] n_tty: fix dropped output characters |
| |
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@gmail.com> 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
| |