From: Alan Stern <stern@rowland.harvard.edu>
To: Andrey Konovalov <andreyknvl@google.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
USB list <linux-usb@vger.kernel.org>,
Dmitry Vyukov <dvyukov@google.com>
Subject: Re: Testing endpoint halt support for raw-gadget
Date: Sat, 25 Apr 2020 11:02:35 -0400 (EDT) [thread overview]
Message-ID: <Pine.LNX.4.44L0.2004251054140.19305-100000@netrider.rowland.org> (raw)
In-Reply-To: <CAAeHK+z5DXp9HL+=9z2cEOHpBUuhAV_EmDHucyc4+GtSaYJFjg@mail.gmail.com>
On Sat, 25 Apr 2020, Andrey Konovalov wrote:
> On Sat, Apr 25, 2020 at 3:53 AM Alan Stern <stern@rowland.harvard.edu> wrote:
> >
> > On Fri, 24 Apr 2020, Andrey Konovalov wrote:
> >
> > > On Fri, Apr 24, 2020 at 9:36 PM Andrey Konovalov <andreyknvl@google.com> wrote:
> >
> > > > Hi Alan,
> > > >
> > > > I've started working on a test suite for raw-gadget based on the
> > > > usbtest module as you suggested and have a few questions:
> > > >
> > > > 1. (Re test #10:) Currently there's no way to stall USB (control)
> > > > requests with raw-gadget (which is what happens when you return -EPIPE
> > > > from gadget's setup() callback AFAIU). Is stalling an important part
> > > > of the protocol? Should we somehow support it? AFAIU gadgetfs also has
> > > > no ability to stall requests that are passed to userspace.
> >
> > Yes, stalling is important, and you do need to support it. gadgetfs
> > does have a way to stall requests on ep0 from userspace: just perform
> > I/O in the "wrong" direction. If the host sends a control-IN request
> > and the user does a read of the ep0 file, or if the host sends a
> > control-OUT request and the user does a write, gadgetfs will call
> > usb_ep_set_halt. (However I do not remember how the setup_can_stall
> > flag is meant to work.)
>
> Ah, so halting ep0 after having successfully received a setup stage
> request (setup() callback returns 0) will result in a stall during the
> data stage
Or during the status stage, if there is no data stage (a 0-length
transfer).
> (I hope I'm using those "stage" terms right) without the
> gadget needing to queue an URB as it happens during a normal response?
Yes.
> Shouldn't this halt the endpoint until the user (or the gadget)
> unhalts it? Does this work when we want to just stall a single
> request? What happens with the requests that come after?
Ep0 is special. See the description of protocol stalls in sections
8.4.5 and 8.5.3 (especially 8.5.3.4) in the USB 2.0 spec.
Think about the problem for a moment. Suppose a halt of ep0 persisted
until it was cleared by the host. Then it would never get cleared --
the only way the host can clear a halt condition is by sending a
Clear-Halt request on ep0!
Alan Stern
next prev parent reply other threads:[~2020-04-25 15:02 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-09 16:48 Testing endpoint halt support for raw-gadget Andrey Konovalov
2020-04-10 0:29 ` Alan Stern
2020-04-10 15:13 ` Andrey Konovalov
2020-04-10 15:53 ` Alan Stern
2020-04-27 1:26 ` Peter Chen
2020-04-27 14:29 ` Alan Stern
2020-04-29 2:20 ` Andrey Konovalov
2020-04-29 14:06 ` Alan Stern
2020-05-04 14:16 ` Andrey Konovalov
2020-05-04 14:24 ` Alan Stern
2020-05-04 15:11 ` Andrey Konovalov
2020-05-04 15:15 ` Alan Stern
2020-05-05 6:34 ` Felipe Balbi
2020-05-05 12:13 ` Andrey Konovalov
2020-05-05 16:42 ` Thinh Nguyen
2020-05-05 6:30 ` Felipe Balbi
2020-04-24 19:36 ` Andrey Konovalov
2020-04-24 19:56 ` Andrey Konovalov
2020-04-25 1:53 ` Alan Stern
2020-04-25 14:49 ` Andrey Konovalov
2020-04-25 15:02 ` Alan Stern [this message]
2020-04-27 19:51 ` Andrey Konovalov
2020-04-27 20:47 ` Andrey Konovalov
2020-04-28 0:50 ` Andrey Konovalov
2020-04-28 1:32 ` Andrey Konovalov
2020-04-28 13:27 ` Alan Stern
2020-05-13 17:07 ` Andrey Konovalov
2020-05-13 18:14 ` Alan Stern
2020-05-13 18:31 ` Andrey Konovalov
2020-05-13 19:09 ` Alan Stern
2020-05-13 19:38 ` Andrey Konovalov
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=Pine.LNX.4.44L0.2004251054140.19305-100000@netrider.rowland.org \
--to=stern@rowland.harvard.edu \
--cc=andreyknvl@google.com \
--cc=dvyukov@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-usb@vger.kernel.org \
/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.