Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1231379

Re: [PATCH 2/3] usb: gadget: f_midi: free usb request when done

From Felipe Tonello <eu@felipetonello.com>
Newsgroups linux.kernel
Subject Re: [PATCH 2/3] usb: gadget: f_midi: free usb request when done
Date 2015-09-23 13:50 +0200
Message-ID <qbQIG-33j-29@gated-at.bofh.it> (permalink)
References <qbAXh-5tC-49@gated-at.bofh.it> <qbB6W-5Uu-17@gated-at.bofh.it> <qbQIG-33j-31@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Hi Peter,

On Wed, Sep 23, 2015 at 4:10 AM, Peter Chen <peter.chen@freescale.com> wrote:
> On Tue, Sep 22, 2015 at 07:59:09PM +0100, Felipe F. Tonello wrote:
>> req->actual == req->length means that there is no data left to enqueue,
>> so free the request.
>>
>> Signed-off-by: Felipe F. Tonello <eu@felipetonello.com>
>> ---
>>  drivers/usb/gadget/function/f_midi.c | 5 ++++-
>>  1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/usb/gadget/function/f_midi.c b/drivers/usb/gadget/function/f_midi.c
>> index edb84ca..e92aff5 100644
>> --- a/drivers/usb/gadget/function/f_midi.c
>> +++ b/drivers/usb/gadget/function/f_midi.c
>> @@ -258,7 +258,10 @@ f_midi_complete(struct usb_ep *ep, struct usb_request *req)
>>               } else if (ep == midi->in_ep) {
>>                       /* Our transmit completed. See if there's more to go.
>>                        * f_midi_transmit eats req, don't queue it again. */
>> -                     f_midi_transmit(midi, req);
>> +                     if (req->actual < req->length)
>> +                             f_midi_transmit(midi, req);
>> +                     else
>> +                             free_ep_req(ep, req);
>>                       return;
>>               }
>
> It is incorrect, if no reqeust in queue, how device knows when
> the host sends data?

This is the complete function of the IN endpoint.

Actually I believe the proper patch is to enqueue this request again
if req->actual < req->length is true. Because the data is still there,
just not fully completed. Asking to transmit the request again will
cause to read new data from ALSA MIDI module, which it can possibly
steal data from a real ALSA request from f_midi_in_trigger. If that
doesn't happen (req->length == 0), the request will be freed anyway.

Any thoughts?

Felipe
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 2/3] usb: gadget: f_midi: free usb request when done "Felipe F. Tonello" <eu@felipetonello.com> - 2015-09-22 21:10 +0200
  Re: [PATCH 2/3] usb: gadget: f_midi: free usb request when done Felipe Balbi <balbi@ti.com> - 2015-09-22 23:20 +0200
  Re: [PATCH 2/3] usb: gadget: f_midi: free usb request when done Felipe Tonello <eu@felipetonello.com> - 2015-09-23 13:50 +0200
    Re: [PATCH 2/3] usb: gadget: f_midi: free usb request when done Alan Stern <stern@rowland.harvard.edu> - 2015-09-23 16:40 +0200
      Re: [PATCH 2/3] usb: gadget: f_midi: free usb request when done Felipe Tonello <eu@felipetonello.com> - 2015-09-23 16:50 +0200

csiph-web