From: Jiebing Li Date: Thu, 11 Dec 2014 05:26:29 +0000 (+0800) Subject: UPSTREAM: usb: dwc3: gadget: release spin lock during gadget resume X-Git-Tag: firefly_0821_release~1884 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=1baa189ddb5a0cf51e28ab6d22beef47663bc942;p=firefly-linux-kernel-4.4.55.git UPSTREAM: usb: dwc3: gadget: release spin lock during gadget resume It's a requirement that we release controller's lock while calling gadget API function pointers. This patch just fixes that long standing bug. Change-Id: I19c2cd36fa48a6c27d59305ef2d6cb4c35512433 Signed-off-by: Jiebing Li Signed-off-by: Felipe Balbi Signed-off-by: Wu Liang feng (cherry picked from commit ad14d4e0308afda06a60036020a15025571604af) --- diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 2d981e1b869c..f6d90fb121d9 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2484,7 +2484,11 @@ static void dwc3_gadget_wakeup_interrupt(struct dwc3 *dwc) * implemented. */ - dwc->gadget_driver->resume(&dwc->gadget); + if (dwc->gadget_driver && dwc->gadget_driver->resume) { + spin_unlock(&dwc->lock); + dwc->gadget_driver->resume(&dwc->gadget); + spin_lock(&dwc->lock); + } } static void dwc3_gadget_linksts_change_interrupt(struct dwc3 *dwc,