From: Oliver Neukum <oneukum@suse.com>
To: Sven Brauch <mail@svenbrauch.de>
Cc: Johan Hovold <johan@kernel.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>,
Peter Hurley <peter@hurleysoftware.com>,
Toby Gray <toby.gray@realvnc.com>,
linux-usb@vger.kernel.org, linux-serial@vger.kernel.org
Subject: Re: [PATCH] Fix data loss in cdc-acm
Date: Tue, 21 Jul 2015 15:43:15 +0200 [thread overview]
Message-ID: <1437486195.3823.13.camel@suse.com> (raw)
In-Reply-To: <55AD38E5.1090807@svenbrauch.de>
On Mon, 2015-07-20 at 20:07 +0200, Sven Brauch wrote:
> On 20/07/15 19:25, Johan Hovold wrote:
> > What kernel version are you using?
> I'm using linux 4.1.2.
>
> > The idea of adding another layer of buffering in the cdc-acm driver has
> > been suggested in the past but was rejected (or at least questioned).
> > See for example this thread:
> >
> > https://lkml.kernel.org/r/20110608164626.22bc893c@lxorguk.ukuu.org.uk
> Yes, that is indeed pretty much the same problem and the same solution.
> Answering to the questions brought up in that thread:
Yes, but that was not really a modem. The stuff on the other end
doesn't come over an external conection.
> > a) Why is your setup filling 64K in the time it takes the throttle
> > response to occur
> As far as I understand, the throttle happens only when there's less than
> 128 bytes of free space in the tty buffer. Data can already be lost
> before the tty even decides it should start throttling, simply because
> the throttle threshold is smaller than the amount of data potentially in
> each urb. Also (excuse my cluelessness) it seems that when exactly the
Then there is a problem in the tty code. Now it may not have enough
information, but there is no point of turning the buffers of cdc-acm
into an inofficial buffer.
> throttling happens depends on some scheduling "jitter" as well.
> Additionally, the response of the cdc_acm driver to a throttle request
> is not very prompt; it might have a queue of up to 16kB (16 urbs) pending.
>
> > b) Do we care (is the right thing to do to lose bits anyway at
> > that point)
> This I cannot answer, I don't know enough about the architecture or
> standards. I can just say that for my case, there's a lot of losses;
> this it not an issue which happens after hours when the system is under
> heavy load, it happens after just a few seconds reproducably.
Then the tty layer needs to throttle earlier. In the general case we
must be ready to throw away data.
> > The tty buffers are quite large these days, but could possibly be bumped
> > further if needed to give the ldisc some more time to throttle the
> > device at very high speeds.
> I do not like this solution. It will again be based on luck, and you
> will still be unable to rely on the delivery guarantee made by the USB
> stack (at least when using bulk).
> My suggestion instead stops the host system from accepting any more data
> from the device when its buffers are full, forcing the device to wait
> before sending out more data (which many kinds of devices might very
> well be able to do).
But others won't and we'd preserve stale data in preference over fresh
data.
> Also note that this patch does not introduce an extra layer of
> buffering. The buffers are already there; this change just alters the
> process which decides when to submit the buffers to the tty, and when to
> free them for more input data from the device.
It does. It turns those buffers from temporary scratch buffers into
a queue.
Regards
Oliver
next prev parent reply other threads:[~2015-07-21 13:43 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-19 21:37 [PATCH] Fix data loss in cdc-acm Sven Brauch
2015-07-20 17:25 ` Johan Hovold
2015-07-20 18:07 ` Sven Brauch
2015-07-21 9:18 ` Johan Hovold
2015-07-21 16:45 ` Peter Hurley
2015-07-21 16:45 ` Peter Hurley
2015-07-22 8:40 ` Oliver Neukum
2015-07-22 14:30 ` Peter Hurley
2015-07-22 15:01 ` Oliver Neukum
[not found] ` <1437577303.5445.7.camel-IBi9RG/b67k@public.gmane.org>
2015-08-05 0:26 ` Peter Hurley
2015-08-05 0:26 ` Peter Hurley
2015-07-21 13:43 ` Oliver Neukum [this message]
[not found] ` <1437486195.3823.13.camel-IBi9RG/b67k@public.gmane.org>
2015-07-21 21:43 ` Sven Brauch
2015-07-21 21:43 ` Sven Brauch
2015-07-21 23:34 ` Peter Hurley
2015-07-22 0:47 ` Sven Brauch
2015-07-22 22:12 ` Peter Hurley
2015-07-22 22:53 ` Sven Brauch
2015-07-27 10:00 ` Peter Stuge
[not found] ` <55B01EDE.3050503-ITmcY+a7/CDoK6nBLMlh1Q@public.gmane.org>
2015-08-05 17:36 ` Peter Hurley
2015-08-05 17:36 ` Peter Hurley
[not found] ` <55C249A3.6030809-WaGBZJeGNqdsbIuE7sb01tBPR1lH4CV8@public.gmane.org>
2015-10-20 18:16 ` Peter Hurley
2015-10-20 18:16 ` Peter Hurley
2015-10-21 10:12 ` Oliver Neukum
2015-10-21 12:09 ` Peter Hurley
2015-10-21 14:58 ` Peter Hurley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1437486195.3823.13.camel@suse.com \
--to=oneukum@suse.com \
--cc=gnomes@lxorguk.ukuu.org.uk \
--cc=johan@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mail@svenbrauch.de \
--cc=peter@hurleysoftware.com \
--cc=toby.gray@realvnc.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.