Merge "usb: dwc3: Don't perform pm rt sync operations in atomic context"

This commit is contained in:
qctecmdr 2021-09-16 04:04:07 -07:00 • committed by Gerrit - the friendly Code Review server
commit adc03f0e9a

View file

@ -951,6 +951,7 @@ static int dwc3_gadget_ep_disable(struct usb_ep *ep)
struct dwc3 *dwc;
unsigned long flags;
int ret;
bool call_rpm_put = false;
if (!ep) {
pr_debug("dwc3: invalid parameters\n");
@ -965,13 +966,18 @@ static int dwc3_gadget_ep_disable(struct usb_ep *ep)
dep->name))
return 0;
pm_runtime_get_sync(dwc->sysdev);
if (atomic_read(&dwc->in_lpm)) {
pm_runtime_get_sync(dwc->sysdev);
call_rpm_put = true;
}
spin_lock_irqsave(&dwc->lock, flags);
ret = __dwc3_gadget_ep_disable(dep);
dbg_event(dep->number, "DISABLE", ret);
spin_unlock_irqrestore(&dwc->lock, flags);
pm_runtime_mark_last_busy(dwc->sysdev);
pm_runtime_put_autosuspend(dwc->sysdev);
if (call_rpm_put) {
pm_runtime_mark_last_busy(dwc->sysdev);
pm_runtime_put_autosuspend(dwc->sysdev);
}
return ret;
}