diff mbox series

usb: dwc2: Drop unlock/lock upon queueing a work item

Message ID 77c07f00a6a9d94323c4a060a3c72817b0703b97.1574244795.git.lukas@wunner.de (mailing list archive)
State Mainlined
Commit d8bc3bf8deede6d9c32f97b6a256264609ce2baa
Headers show
Series usb: dwc2: Drop unlock/lock upon queueing a work item | expand

Commit Message

Lukas Wunner Nov. 20, 2019, 10:15 a.m. UTC
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@wunner.de>
---
 drivers/usb/dwc2/core_intr.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

Comments

Lukas Wunner Jan. 9, 2020, 12:36 p.m. UTC | #1
Hi Felipe,

just a gentle ping:  The below patch was submitted more than 8 weeks ago
and I'm neither seeing it on one of your branches nor have there been
any comments on the list.  Are there objections to this patch?

Thanks,

Lukas

On Wed, Nov 20, 2019 at 11:15:15AM +0100, 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@wunner.de>
> ---
>  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);
> -	}
>  }
>  
>  /**
> -- 
> 2.24.0
Felipe Balbi Jan. 15, 2020, 8:59 a.m. UTC | #2
Hi,

Lukas Wunner <lukas@wunner.de> writes:
> Hi Felipe,
>
> just a gentle ping:  The below patch was submitted more than 8 weeks ago
> and I'm neither seeing it on one of your branches nor have there been
> any comments on the list.  Are there objections to this patch?

I don't see an Acked-by Minas, so I can't take the patch, sorry.
Minas Harutyunyan Jan. 15, 2020, 9:25 a.m. UTC | #3
Hi,

On 1/15/2020 12:59 PM, Felipe Balbi wrote:
> 
> Hi,
> 
> Lukas Wunner <lukas@wunner.de> writes:
>> Hi Felipe,
>>
>> just a gentle ping:  The below patch was submitted more than 8 weeks ago
>> and I'm neither seeing it on one of your branches nor have there been
>> any comments on the list.  Are there objections to this patch?
> 
> I don't see an Acked-by Minas, so I can't take the patch, sorry.
> 

But I didn't find original patch email in my inbox. I just got this ping.

Thanks,
Minas
Lukas Wunner Jan. 15, 2020, 11:30 a.m. UTC | #4
On Wed, Jan 15, 2020 at 09:25:30AM +0000, Minas Harutyunyan wrote:
> On 1/15/2020 12:59 PM, Felipe Balbi wrote:
> > Lukas Wunner <lukas@wunner.de> writes:
> > > just a gentle ping:  The below patch was submitted more than 8 weeks ago
> > > and I'm neither seeing it on one of your branches nor have there been
> > > any comments on the list.  Are there objections to this patch?
> > 
> > I don't see an Acked-by Minas, so I can't take the patch, sorry.
> 
> But I didn't find original patch email in my inbox. I just got this ping.

You were cc'ed on the patch and I didn't receive a bounce message.
So it must have been accepted by Synopsys' mail server.

I've just forwarded the e-mail to you once more.  Additionally you can
review the patch in the mailing list archive and, if there are no
objections, provide an Acked-by in reply to the present e-mail:

https://lore.kernel.org/linux-usb/77c07f00a6a9d94323c4a060a3c72817b0703b97.1574244795.git.lukas@wunner.de/

Thanks,

Lukas
Minas Harutyunyan Jan. 15, 2020, 11:44 a.m. UTC | #5
Hi Lukas,

On 1/15/2020 3:30 PM, Lukas Wunner wrote:
> On Wed, Jan 15, 2020 at 09:25:30AM +0000, Minas Harutyunyan wrote:
>> On 1/15/2020 12:59 PM, Felipe Balbi wrote:
>>> Lukas Wunner <lukas@wunner.de> writes:
>>>> just a gentle ping:  The below patch was submitted more than 8 weeks ago
>>>> and I'm neither seeing it on one of your branches nor have there been
>>>> any comments on the list.  Are there objections to this patch?
>>>
>>> I don't see an Acked-by Minas, so I can't take the patch, sorry.
>>
>> But I didn't find original patch email in my inbox. I just got this ping.
> 
> You were cc'ed on the patch and I didn't receive a bounce message.
> So it must have been accepted by Synopsys' mail server.
> 
> I've just forwarded the e-mail to you once more.  Additionally you can
> review the patch in the mailing list archive and, if there are no
> objections, provide an Acked-by in reply to the present e-mail:

Ok. I just received your resubmitted patch.
> 
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_linux-2Dusb_77c07f00a6a9d94323c4a060a3c72817b0703b97.1574244795.git.lukas-40wunner.de_&d=DwIBAg&c=DPL6_X_6JkXFx7AXWqB0tg&r=6z9Al9FrHR_ZqbbtSAsD16pvOL2S3XHxQnSzq8kusyI&m=RvUQvVjq5dj9CVUu3njmpdm88GS6B3rFv7iB9Rj8k4Y&s=p4AmQK1vx63kNa3BDdfxaOO1C80AvmgTQY5wtKJcXbc&e=
> 
> Thanks,
> 
> Lukas
> 
Actually I agree with you on unnecessary unlock/lock here. Currently I'm 
going to test your patch before Ack.
Just, want to check with you - did you see any issue in driver flow 
without this patch? or it just code cleanup?

Thanks,
Minas
Lukas Wunner Jan. 15, 2020, 11:57 a.m. UTC | #6
On Wed, Jan 15, 2020 at 11:44:14AM +0000, Minas Harutyunyan wrote:
> On 1/15/2020 3:30 PM, Lukas Wunner wrote:
> > https://urldefense.proofpoint.com/v2/url?u=https-3A__lore.kernel.org_linux-2Dusb_77c07f00a6a9d94323c4a060a3c72817b0703b97.1574244795.git.lukas-40wunner.de_&d=DwIBAg&c=DPL6_X_6JkXFx7AXWqB0tg&r=6z9Al9FrHR_ZqbbtSAsD16pvOL2S3XHxQnSzq8kusyI&m=RvUQvVjq5dj9CVUu3njmpdm88GS6B3rFv7iB9Rj8k4Y&s=p4AmQK1vx63kNa3BDdfxaOO1C80AvmgTQY5wtKJcXbc&e=
> 
> Actually I agree with you on unnecessary unlock/lock here. Currently I'm 
> going to test your patch before Ack.
> Just, want to check with you - did you see any issue in driver flow 
> without this patch? or it just code cleanup?

Just a cleanup.  I was looking through dwc_otg (which is still used by the
Raspberry Pi Foundation's downstream tree) and checked to what extent the
antipatterns found there are still present in dwc2, thereby found this
occurrence.

Thanks,

Lukas
Minas Harutyunyan Jan. 15, 2020, 1:11 p.m. UTC | #7
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@wunner.de>
> ---

Acked-by: Minas Harutyunyan <hminas@synopsys.com>

>   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);
> -	}
>   }
>   
>   /**
>
Felipe Balbi Jan. 15, 2020, 1:15 p.m. UTC | #8
Hi Greg,

Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> writes:

> 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@wunner.de>
>> ---
>
> Acked-by: Minas Harutyunyan <hminas@synopsys.com>

Do you mind picking this one up as a patch?

Acked-by: Felipe Balbi <balbi@kernel.org>

ps: if you don't have the patch anymore, I can dig it up and resend with
all appropriate acked-by tags.

cheers
Greg KH Jan. 15, 2020, 1:37 p.m. UTC | #9
On Wed, Jan 15, 2020 at 03:15:26PM +0200, Felipe Balbi wrote:
> 
> Hi Greg,
> 
> Minas Harutyunyan <Minas.Harutyunyan@synopsys.com> writes:
> 
> > 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@wunner.de>
> >> ---
> >
> > Acked-by: Minas Harutyunyan <hminas@synopsys.com>
> 
> Do you mind picking this one up as a patch?
> 
> Acked-by: Felipe Balbi <balbi@kernel.org>
> 
> ps: if you don't have the patch anymore, I can dig it up and resend with
> all appropriate acked-by tags.

I can take it, thanks.

greg k-h
diff mbox series

Patch

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);
-	}
 }
 
 /**