On 11/20/2019 2:15 PM, Lukas Wunner wrote: > The original dwc_otg driver used a DWC_WORKQ_SCHEDULE() wrapper to queue > work items. Because that wrapper acquired the driver's global spinlock, > an unlock/lock dance was necessary whenever a work item was queued up > while the global spinlock was already held. > > The dwc2 driver dropped DWC_WORKQ_SCHEDULE() in favor of a direct call > to queue_work(), but retained the (now gratuitous) unlock/lock dance in > dwc2_handle_conn_id_status_change_intr(). Drop it. > > Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx> > --- Acked-by: Minas Harutyunyan <hminas@xxxxxxxxxxxx> > drivers/usb/dwc2/core_intr.c | 7 +------ > 1 file changed, 1 insertion(+), 6 deletions(-) > > diff --git a/drivers/usb/dwc2/core_intr.c b/drivers/usb/dwc2/core_intr.c > index 6af6add3d4c0..876ff31261d5 100644 > --- a/drivers/usb/dwc2/core_intr.c > +++ b/drivers/usb/dwc2/core_intr.c > @@ -288,14 +288,9 @@ static void dwc2_handle_conn_id_status_change_intr(struct dwc2_hsotg *hsotg) > > /* > * Need to schedule a work, as there are possible DELAY function calls. > - * Release lock before scheduling workq as it holds spinlock during > - * scheduling. > */ > - if (hsotg->wq_otg) { > - spin_unlock(&hsotg->lock); > + if (hsotg->wq_otg) > queue_work(hsotg->wq_otg, &hsotg->wf_otg); > - spin_lock(&hsotg->lock); > - } > } > > /** >