Message ID | 7077bb0f5691732b9814ea76d38ae8e9312a61f5.1612412038.git.Thinh.Nguyen@synopsys.com |
---|---|
State | New |
Headers | show |
Series | usb: dwc3: gadget: Remove check for bounded driver | expand |
On Wed, Feb 03, 2021 at 08:14:37PM -0800, Thinh Nguyen wrote: > The check for bounded gadget driver in dwc3_gadget_start() was to > prevent going through the initialization again without any cleanup. With > a recent update, the UDC framework guarantees this won't happen while > the UDC is started. Also, this check doesn't prevent requesting threaded > irq to the same dev_id, which will mess up the irq freeing logic. Let's > remove it. What "recent update" caused this? Is this a fix for something that needs to be backported? If so, can you provide a "Fixes:" tag on here? Or is this just a general cleanup that is good to do now. thanks, greg k-h
On Fri, Feb 05, 2021 at 09:39:37AM +0000, Thinh Nguyen wrote: > Greg Kroah-Hartman wrote: > > On Wed, Feb 03, 2021 at 08:14:37PM -0800, Thinh Nguyen wrote: > >> The check for bounded gadget driver in dwc3_gadget_start() was to > >> prevent going through the initialization again without any cleanup. With > >> a recent update, the UDC framework guarantees this won't happen while > >> the UDC is started. Also, this check doesn't prevent requesting threaded > >> irq to the same dev_id, which will mess up the irq freeing logic. Let's > >> remove it. > > What "recent update" caused this? Is this a fix for something that > > needs to be backported? If so, can you provide a "Fixes:" tag on here? > > Or is this just a general cleanup that is good to do now. > > > > thanks, > > > > greg k-h > > It's general cleanup. The "recent update" is not in mainline yet but on > your "usb-next" branch so I'm not sure how to properly reference it. > > But here's the commit on your branch I was referring to: 49d08cfc7830 > ("usb: udc: core: Introduce started state") Please refer to this commit just like this, as the id is not going to change. Can you redo this patch with that information in it? thanks, greg k-h
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 86f257f12d45..6a18e822fa98 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2370,7 +2370,7 @@ static int dwc3_gadget_start(struct usb_gadget *g, { struct dwc3 *dwc = gadget_to_dwc(g); unsigned long flags; - int ret = 0; + int ret; int irq; irq = dwc->irq_gadget; @@ -2379,29 +2379,14 @@ static int dwc3_gadget_start(struct usb_gadget *g, if (ret) { dev_err(dwc->dev, "failed to request irq #%d --> %d\n", irq, ret); - goto err0; + return ret; } spin_lock_irqsave(&dwc->lock, flags); - if (dwc->gadget_driver) { - dev_err(dwc->dev, "%s is already bound to %s\n", - dwc->gadget->name, - dwc->gadget_driver->driver.name); - ret = -EBUSY; - goto err1; - } - dwc->gadget_driver = driver; spin_unlock_irqrestore(&dwc->lock, flags); return 0; - -err1: - spin_unlock_irqrestore(&dwc->lock, flags); - free_irq(irq, dwc); - -err0: - return ret; } static void __dwc3_gadget_stop(struct dwc3 *dwc)
The check for bounded gadget driver in dwc3_gadget_start() was to prevent going through the initialization again without any cleanup. With a recent update, the UDC framework guarantees this won't happen while the UDC is started. Also, this check doesn't prevent requesting threaded irq to the same dev_id, which will mess up the irq freeing logic. Let's remove it. Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com> --- drivers/usb/dwc3/gadget.c | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) base-commit: d021e0694d77ee3cdc5d3fca2c8d53ae7575499a