linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Felipe Balbi <balbi@kernel.org>, linux-usb@vger.kernel.org
Cc: Greg KH <greg@kroah.com>, Joel Stanley <joel@jms.id.au>,
	Andrew Jeffery <andrew@aj.id.au>
Subject: [v5,1/2] usb/gadget: Add an EP dispose() callback for EP lifetime tracking
Date: Sat, 17 Mar 2018 11:37:46 +1100	[thread overview]
Message-ID: <1521247066.16434.207.camel@kernel.crashing.org> (raw)

On Fri, 2018-03-16 at 13:02 +0200, Felipe Balbi wrote:
> Hi,
> 
> Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
> > Some UDC may want to allocate endpoints dynamically, either because
> > the HW supports an arbitrary large number or because (like the Aspeed
> > BMC SoCs), the pool of HW endpoints is shared between multiple gadgets.
> > 
> > The allocation side can be done rather easily using the existing
> > match_ep() UDC hook.
> > 
> > However we have no good place to "free" them.
> > 
> > This implements a "simple" variant of this, which calls an EP dispose
> > callback on all EPs associated with a gadget when the composite device
> > gets unbound.
> > 
> > This is required by my upcoming Aspeed vHub driver.
> > 
> > Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> > ---
> >  drivers/usb/gadget/composite.c | 8 ++++++++
> >  include/linux/usb/gadget.h     | 1 +
> >  2 files changed, 9 insertions(+)
> > 
> > diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
> > index 77c7ecca816a..ec99c9cfc1a2 100644
> > --- a/drivers/usb/gadget/composite.c
> > +++ b/drivers/usb/gadget/composite.c
> > @@ -2172,6 +2172,7 @@ int composite_os_desc_req_prepare(struct usb_composite_dev *cdev,
> >  void composite_dev_cleanup(struct usb_composite_dev *cdev)
> >  {
> >  	struct usb_gadget_string_container *uc, *tmp;
> > +	struct usb_ep			   *ep, *tmp_ep;
> >  
> >  	list_for_each_entry_safe(uc, tmp, &cdev->gstrings, list) {
> >  		list_del(&uc->list);
> > @@ -2193,6 +2194,13 @@ void composite_dev_cleanup(struct usb_composite_dev *cdev)
> >  	}
> >  	cdev->next_string_id = 0;
> >  	device_remove_file(&cdev->gadget->dev, &dev_attr_suspended);
> > +
> > +	/* Dispose EPs if the UDC driver tracks lifetime */
> > +	list_for_each_entry_safe(ep, tmp_ep,
> > +				 &cdev->gadget->ep_list, ep_list) {
> 
> do you really need this to be safe? You don't seem to be modifying
> ep_list here.

Yes, ep->dispose() may do just that. In my Aspeed implementation in
fact that's pretty much the first thing it does.

IE, I'm returning all the endpoints to the common pool, thus taking
them out of the gadget EP list.

That said, there could be other reasons why a driver might want to know
about disposal without actually taking all the EPs back (for example a
driver could have some dedicated EPs and some in a pool) so I prefer
the list_del remaining in the back-end.

Cheers,
Ben.
---
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

             reply	other threads:[~2018-03-17  0:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-17  0:37 Benjamin Herrenschmidt [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-03-22  8:57 [v5,1/2] usb/gadget: Add an EP dispose() callback for EP lifetime tracking Felipe Balbi
2018-03-19 21:41 Benjamin Herrenschmidt
2018-03-19 10:56 Felipe Balbi
2018-03-16 11:02 Felipe Balbi
2018-03-16  0: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=1521247066.16434.207.camel@kernel.crashing.org \
    --to=benh@kernel.crashing.org \
    --cc=andrew@aj.id.au \
    --cc=balbi@kernel.org \
    --cc=greg@kroah.com \
    --cc=joel@jms.id.au \
    --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 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).