From: Paul Elder <paul.elder@ideasonboard.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: laurent.pinchart@ideasonboard.com,
kieran.bingham@ideasonboard.com, b-liu@ti.com, rogerq@ti.com,
balbi@kernel.org, gregkh@linuxfoundation.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [v5,4/6] usb: gadget: add mechanism to specify an explicit status stage
Date: Mon, 14 Jan 2019 00:11:13 -0500 [thread overview]
Message-ID: <20190114051113.GD32268@localhost.localdomain> (raw)
On Fri, Jan 11, 2019 at 10:50:11AM -0500, Alan Stern wrote:
> On Fri, 11 Jan 2019, Paul Elder wrote:
>
> > On Wed, Jan 09, 2019 at 02:06:31PM -0500, Alan Stern wrote:
> > > On Wed, 9 Jan 2019, Paul Elder wrote:
> > >
> > > > A usb gadget function driver may or may not want to delay the status
> > > > stage of a control OUT request. An instance where it might want to is to
> > > > asynchronously validate the data of a class-specific request.
> > > >
> > > > A function driver that wants an explicit status stage should set the
> > > > newly added explicit_status flag of the usb_request corresponding to the
> > > > data stage. Later on, the function driver can explicitly complete the
> > > > status stage by enqueueing a usb_request for ACK, or calling
> > > > usb_ep_set_halt() for STALL.
> > > >
> > > > To support both explicit and implicit status stages, a UDC driver must
> > > > call the newly added usb_gadget_control_complete function right before
> > > > calling usb_gadget_giveback_request. To support the explicit status
> > > > stage, it might then check what stage the usb_request was queued in, and
> > > > for control IN ACK the host's zero-length data packet, or for control
> > > > OUT send a zero-length DATA1 ACK packet.
> > > >
> > > > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > > > v4 Acked-by: Alan Stern <stern@rowland.harvard.edu>
> > > > v1 Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > >
> > > This looks good and has passed my tests so far.
> >
> > Good! Thank you :)
> >
> > > Can you check your uvc
> > > changes using dummy_hcd with the patch below?
> >
> > I'm not sure what to make of the test results. I get the same results
> > with or without the patch. Which I guess makes sense... in dummy_queue,
> > this is getting hit when the uvc function driver tries to complete the
> > delayed status:
> >
> > req = usb_request_to_dummy_request(_req);
> > if (!_req || !list_empty(&req->queue) || !_req->complete)
> > return -EINVAL;
> >
> > So the delayed/explicit status stage is never completed, afaict.
>
> I presume you are hitting the !list_empty(&req->queue) test, yes? The
> other two tests are trivial.
Yes, that is what's happening.
> Triggering the !list_empty() test means the request has already been
> submitted and not yet completed. This probably indicates there is a
> bug in the uvc function driver code.
The uvc function driver works with musb, though :/
I compared the sequence of calls to the uvc setup, completion handler,
and status stage sending, and for some reason dummy_hcd, after an OUT
setup-completion-status sequence, calls a completion-status-completion
sequence, and then goes on the the next request. musb simply goes on to
the next request after the setup-completion-status sequence.
I commented out the paranoia block in dummy_timer, and dummy_hcd still
does the extra completion, but it doesn't error out anymore. I doubt
that's the/a solution though, especially since I get:
[ 22.616577] uvcvideo: Failed to query (129) UVC probe control : -75 (exp. 26).
[ 22.624481] uvcvideo: Failed to initialize the device (-5).
Not sure if that's a result of dummy_hcd not supporting isochronous
transfers or not.
I'm not sure where to continue investigating :/
Thanks,
Paul
WARNING: multiple messages have this Message-ID (diff)
From: Paul Elder <paul.elder@ideasonboard.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: laurent.pinchart@ideasonboard.com,
kieran.bingham@ideasonboard.com, b-liu@ti.com, rogerq@ti.com,
balbi@kernel.org, gregkh@linuxfoundation.org,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v5 4/6] usb: gadget: add mechanism to specify an explicit status stage
Date: Mon, 14 Jan 2019 00:11:13 -0500 [thread overview]
Message-ID: <20190114051113.GD32268@localhost.localdomain> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1901111044290.1501-100000@iolanthe.rowland.org>
On Fri, Jan 11, 2019 at 10:50:11AM -0500, Alan Stern wrote:
> On Fri, 11 Jan 2019, Paul Elder wrote:
>
> > On Wed, Jan 09, 2019 at 02:06:31PM -0500, Alan Stern wrote:
> > > On Wed, 9 Jan 2019, Paul Elder wrote:
> > >
> > > > A usb gadget function driver may or may not want to delay the status
> > > > stage of a control OUT request. An instance where it might want to is to
> > > > asynchronously validate the data of a class-specific request.
> > > >
> > > > A function driver that wants an explicit status stage should set the
> > > > newly added explicit_status flag of the usb_request corresponding to the
> > > > data stage. Later on, the function driver can explicitly complete the
> > > > status stage by enqueueing a usb_request for ACK, or calling
> > > > usb_ep_set_halt() for STALL.
> > > >
> > > > To support both explicit and implicit status stages, a UDC driver must
> > > > call the newly added usb_gadget_control_complete function right before
> > > > calling usb_gadget_giveback_request. To support the explicit status
> > > > stage, it might then check what stage the usb_request was queued in, and
> > > > for control IN ACK the host's zero-length data packet, or for control
> > > > OUT send a zero-length DATA1 ACK packet.
> > > >
> > > > Signed-off-by: Paul Elder <paul.elder@ideasonboard.com>
> > > > v4 Acked-by: Alan Stern <stern@rowland.harvard.edu>
> > > > v1 Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> > >
> > > This looks good and has passed my tests so far.
> >
> > Good! Thank you :)
> >
> > > Can you check your uvc
> > > changes using dummy_hcd with the patch below?
> >
> > I'm not sure what to make of the test results. I get the same results
> > with or without the patch. Which I guess makes sense... in dummy_queue,
> > this is getting hit when the uvc function driver tries to complete the
> > delayed status:
> >
> > req = usb_request_to_dummy_request(_req);
> > if (!_req || !list_empty(&req->queue) || !_req->complete)
> > return -EINVAL;
> >
> > So the delayed/explicit status stage is never completed, afaict.
>
> I presume you are hitting the !list_empty(&req->queue) test, yes? The
> other two tests are trivial.
Yes, that is what's happening.
> Triggering the !list_empty() test means the request has already been
> submitted and not yet completed. This probably indicates there is a
> bug in the uvc function driver code.
The uvc function driver works with musb, though :/
I compared the sequence of calls to the uvc setup, completion handler,
and status stage sending, and for some reason dummy_hcd, after an OUT
setup-completion-status sequence, calls a completion-status-completion
sequence, and then goes on the the next request. musb simply goes on to
the next request after the setup-completion-status sequence.
I commented out the paranoia block in dummy_timer, and dummy_hcd still
does the extra completion, but it doesn't error out anymore. I doubt
that's the/a solution though, especially since I get:
[ 22.616577] uvcvideo: Failed to query (129) UVC probe control : -75 (exp. 26).
[ 22.624481] uvcvideo: Failed to initialize the device (-5).
Not sure if that's a result of dummy_hcd not supporting isochronous
transfers or not.
I'm not sure where to continue investigating :/
Thanks,
Paul
next reply other threads:[~2019-01-14 5:11 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-14 5:11 Paul Elder [this message]
2019-01-14 5:11 ` [PATCH v5 4/6] usb: gadget: add mechanism to specify an explicit status stage Paul Elder
-- strict thread matches above, loose matches on Subject: below --
2019-01-24 2:48 [v5,4/6] " Paul Elder
2019-01-24 2:48 ` [PATCH v5 4/6] " Paul Elder
2019-01-23 21:10 [v5,4/6] " Alan Stern
2019-01-23 21:10 ` [PATCH v5 4/6] " Alan Stern
2019-01-20 17:59 [v5,4/6] " Paul Elder
2019-01-20 17:59 ` [PATCH v5 4/6] " Paul Elder
2019-01-18 16:52 [v5,4/6] " Alan Stern
2019-01-18 16:52 ` [PATCH v5 4/6] " Alan Stern
2019-01-18 16:31 [v5,4/6] " Paul Elder
2019-01-18 16:31 ` [PATCH v5 4/6] " Paul Elder
2019-01-16 15:06 [v5,4/6] " Alan Stern
2019-01-16 15:06 ` [PATCH v5 4/6] " Alan Stern
2019-01-16 5:00 [v5,4/6] " Paul Elder
2019-01-16 5:00 ` [PATCH v5 4/6] " Paul Elder
2019-01-14 15:24 [v5,4/6] " Alan Stern
2019-01-14 15:24 ` [PATCH v5 4/6] " Alan Stern
2019-01-11 15:50 [v5,4/6] " Alan Stern
2019-01-11 15:50 ` [PATCH v5 4/6] " Alan Stern
2019-01-11 8:23 [v5,4/6] " Paul Elder
2019-01-11 8:23 ` [PATCH v5 4/6] " Paul Elder
2019-01-09 19:06 [v5,4/6] " Alan Stern
2019-01-09 19:06 ` [PATCH v5 4/6] " Alan Stern
2019-01-09 7:08 [v5,6/6] usb: gadget: uvc: allow ioctl to send response in " Paul Elder
2019-01-09 7:08 ` [PATCH v5 6/6] " Paul Elder
2019-01-09 7:08 [v5,5/6] usb: musb: gadget: implement optional explicit " Paul Elder
2019-01-09 7:08 ` [PATCH v5 5/6] " Paul Elder
2019-01-09 7:08 [v5,4/6] usb: gadget: add mechanism to specify an " Paul Elder
2019-01-09 7:08 ` [PATCH v5 4/6] " Paul Elder
2019-01-09 7:08 [v5,3/6] usb: gadget: uvc: package setup and data for control OUT requests Paul Elder
2019-01-09 7:08 ` [PATCH v5 3/6] " Paul Elder
2019-01-09 7:08 [v5,2/6] usb: gadget: uvc: enqueue usb request in setup handler for control OUT Paul Elder
2019-01-09 7:08 ` [PATCH v5 2/6] " Paul Elder
2019-01-09 7:08 [v5,1/6] usb: uvc: include videodev2.h in g_uvc.h Paul Elder
2019-01-09 7:08 ` [PATCH v5 1/6] " Paul Elder
2019-01-09 7:08 [PATCH v5 0/6] usb: gadget: add mechanism to asynchronously validate data stage of ctrl out request Paul Elder
2019-01-10 20:39 ` Alan Stern
2019-01-11 8:43 ` Paul Elder
2019-01-11 18:32 ` Alan Stern
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=20190114051113.GD32268@localhost.localdomain \
--to=paul.elder@ideasonboard.com \
--cc=b-liu@ti.com \
--cc=balbi@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=kieran.bingham@ideasonboard.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=rogerq@ti.com \
--cc=stern@rowland.harvard.edu \
/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.