From: Clemens Ladisch <clemens@ladisch.de>
To: Felipe Ferreri Tonello <eu@felipetonello.com>, linux-usb@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, Felipe Balbi <balbi@ti.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Robert Baldyga <r.baldyga@samsung.com>
Subject: Re: [PATCH v5 7/7] usb: gadget: f_midi: pre-allocate IN requests
Date: Fri, 27 Nov 2015 10:05:12 +0100 [thread overview]
Message-ID: <56581CC8.9080405@ladisch.de> (raw)
In-Reply-To: <5655EE70.8040502@felipetonello.com>
Felipe Ferreri Tonello wrote:
> On 13/11/15 08:55, Clemens Ladisch wrote:
>> Felipe F. Tonello wrote:
>>> +static void f_midi_transmit(struct f_midi *midi)
>>> +{
>>> +...
>>> + len = kfifo_peek(&midi->in_req_fifo, &req);
>>> + ...
>>> + if (req->length > 0) {
>>> + WARNING(midi, "%s: All USB requests have been used. Current queue size "
>>> + "is %u, consider increasing it.\n", __func__, midi->in_req_num);
>>> + goto drop_out;
>>> + }
>>
>> There are two cases where the in_req FIFO might overflow:
>> 1) the gadget is trying to send too much data at once; or
>> 2) the host does not bother to read any of the data.
>>
>> In case 1), the appropriate action would be to do nothing, so that the
>> remaining data is sent after some currently queued packets have been
>> transmitted. In case 2), the appropriate action would be to drop the
>> data (even better, the _oldest_ data), and spamming the log with error
>> messages would not help.
>
> True. In this case the log will be spammed.
>
> How would you suggest to drop the oldest data? That doesn't really seem
> to be feasible.
There is usb_ep_dequeue(). Its documentation warns about some hardware,
but it would be possible to at least try it.
>> I'm not quite sure if trying to detect which of these cases we have is
>> possible, or worthwhile. Anyway, with a packet size of 64, the queue
>> size would be 32*64 = 2KB, which should be enough for everyone. So I
>> propose to ignore case 1), and to drop the error message.
After some thought, I'm not so sure anymore -- the ability to buffer
more than 2 KB of data is part of the snd_rawmidi_write() API, so this
could introduce a regression. And I can imagine cases where one would
actually want to transmit large amounts data.
I think the safest approach would be to behave similar to the old driver,
i.e., when the queue overflows, do nothing (not even dropping data), and
rely on the transmit completion handler to continue. (This implies that
ALSA's buffer can fill up, and that snd_rawmidi_write() can block.)
It you want to dequeue outdated data, I think this should be done with
a timeout, i.e., when the host did not read anything for some tens of
milliseconds or so. This would be independent of the fill level of the
queue, and could be done either for individual packets, or just on the
entire endpoint queue.
Regards,
Clemens
next prev parent reply other threads:[~2015-11-27 9:06 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-10 17:52 [PATCH v5 0/7] USB MIDI Gadget improvements and bug fixes Felipe F. Tonello
2015-11-10 17:52 ` [PATCH v5 1/7] usb: gadget: f_midi: Transmit data only when IN ep is enabled Felipe F. Tonello
2015-11-13 8:08 ` Robert Baldyga
2015-11-10 17:52 ` [PATCH v5 2/7] usb: gadget: f_midi: remove duplicated code Felipe F. Tonello
2015-11-13 8:09 ` Robert Baldyga
2015-11-10 17:52 ` [PATCH v5 3/7] usb: gadget: define free_ep_req as universal function Felipe F. Tonello
2015-11-13 8:11 ` Robert Baldyga
2015-11-10 17:52 ` [PATCH v5 4/7] usb: gadget: f_midi: fix leak on failed to enqueue out requests Felipe F. Tonello
2015-11-13 8:31 ` Robert Baldyga
2015-11-16 11:08 ` Felipe Ferreri Tonello
2015-11-16 11:43 ` Robert Baldyga
2015-11-25 13:02 ` Felipe Ferreri Tonello
2015-11-10 17:52 ` [PATCH v5 5/7] usb: gadget: gmidi: Cleanup legacy code Felipe F. Tonello
2015-11-13 8:34 ` Robert Baldyga
2015-11-10 17:52 ` [PATCH v5 6/7] usb: gadget: f_midi: set altsettings only for MIDIStreaming interface Felipe F. Tonello
2015-11-10 18:43 ` Sergei Shtylyov
2015-11-11 9:38 ` Felipe Ferreri Tonello
2015-11-11 18:02 ` Sergei Shtylyov
2015-11-13 8:11 ` Clemens Ladisch
2015-11-16 11:41 ` Felipe Ferreri Tonello
2015-11-13 8:14 ` Clemens Ladisch
2015-11-10 17:52 ` [PATCH v5 7/7] usb: gadget: f_midi: pre-allocate IN requests Felipe F. Tonello
2015-11-13 8:55 ` Clemens Ladisch
2015-11-25 17:22 ` Felipe Ferreri Tonello
2015-11-27 9:05 ` Clemens Ladisch [this message]
2015-11-27 18:03 ` Felipe Ferreri Tonello
2015-11-27 19:52 ` Clemens Ladisch
2015-11-13 12:38 ` Robert Baldyga
2015-11-25 16:54 ` Felipe Ferreri Tonello
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=56581CC8.9080405@ladisch.de \
--to=clemens@ladisch.de \
--cc=balbi@ti.com \
--cc=eu@felipetonello.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=r.baldyga@samsung.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.