From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: Felipe Balbi <balbi@kernel.org>,
"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
Michal Nazarewicz <mina86@mina86.com>
Subject: Re: Virtual hub, resets etc...
Date: Fri, 05 Jul 2019 12:15:44 +1000 [thread overview]
Message-ID: <cd91ee110c9fa39756e34d020ef284540a30feb2.camel@kernel.crashing.org> (raw)
In-Reply-To: <Pine.LNX.4.44L0.1907042135090.840-100000@netrider.rowland.org>
On Thu, 2019-07-04 at 21:37 -0400, Alan Stern wrote:
> >
> > Talking of which... do we need this ?
> >
> > --- a/drivers/usb/gadget/composite.c
> > +++ b/drivers/usb/gadget/composite.c
> > @@ -1976,6 +1976,7 @@ void composite_disconnect(struct usb_gadget *gadget)
> > * disconnect callbacks?
> > */
> > spin_lock_irqsave(&cdev->lock, flags);
> > + cdev->suspended = 0;
> > if (cdev->config)
> > reset_config(cdev);
> > if (cdev->driver->disconnect)
> >
> > Otherwise with my vhub or with dummy_hcd, a suspend followed by a reset
> > will keep that stale suspended flag to 1 (which has no effect at the moment
> > but still...)
> >
> > If yes, I'll submit a patch accordingly...
>
> According to the USB spec, a host is not supposed to reset a suspended
> port (it's supposed to resume the port and then do the reset). But of
> course this can happen anyway, so we should handle it properly.
Right. I do see the resume coming in, but I don't forward it to the
gadget because here's what happens in that order:
1- Host gets shutdown (or cable disconnected)
2- Upstream bus suspend: I call ->suspend on the gadgets on all
enabled ports that don't have USB_PORT_STAT_SUSPEND already set. I
don't change the port status, I don't set USB_PORT_STAT_SUSPEND
3- Machine gets turned back on (or cable reconnected)
4- Upstream bus resume: I call ->resume on the gadgets on all
enabled ports that don't have USB_PORT_STAT_SUSPEND set.
5- Upstream bus reset: I call ->suspend on all enabled ports after
clearing their status (I preserve only USB_PORT_STAT_SUSPEND and
USB_PORT_STAT_POWER which is always set for me). Note: I currently do
this even if the port had USB_PORT_STAT_SUSPEND set, so such as port
will get a double suspend ... maybe I shouldn't.
6- Hosts sets port reset: I reset the gadget since it's already
bound/enabled. It's still "suspended".
So we do have a legitimate case of "reset while suspended".
I'll tidy up the patch and submit it.
Cheers,
Ben.
next prev parent reply other threads:[~2019-07-05 2:15 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-04 5:52 Virtual hub, resets etc Benjamin Herrenschmidt
2019-07-04 8:02 ` f_mass_storage configuration races (Was: Virtual hub, resets etc...) Benjamin Herrenschmidt
2019-07-04 8:04 ` [PATCH] usb: gadget: mass_storage: Fix races between fsg_disable and fsg_set_alt Benjamin Herrenschmidt
2019-07-04 16:13 ` Virtual hub, resets etc Alan Stern
2019-07-04 21:44 ` Benjamin Herrenschmidt
2019-07-04 21:58 ` Benjamin Herrenschmidt
2019-07-05 1:37 ` Alan Stern
2019-07-05 2:15 ` Benjamin Herrenschmidt [this message]
2019-07-05 14:20 ` Alan Stern
2019-07-05 22:06 ` Benjamin Herrenschmidt
2019-07-05 1:34 ` Alan Stern
2019-07-05 2:08 ` Benjamin Herrenschmidt
2019-07-05 14:08 ` Alan Stern
2019-07-05 22:01 ` Benjamin Herrenschmidt
2019-07-06 18:37 ` Alan Stern
2019-07-06 23:44 ` Benjamin Herrenschmidt
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=cd91ee110c9fa39756e34d020ef284540a30feb2.camel@kernel.crashing.org \
--to=benh@kernel.crashing.org \
--cc=balbi@kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mina86@mina86.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).