stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] usb: dwc3: gadget: Fix controller get stuck when kicking extra transfer in wrong case
@ 2020-01-07  7:14 Ran Wang
  2020-01-07 10:15 ` Tejas Joglekar
  0 siblings, 1 reply; 4+ messages in thread
From: Ran Wang @ 2020-01-07  7:14 UTC (permalink / raw)
  To: Felipe Balbi, Greg Kroah-Hartman, Tejas Joglekar, Jun Li, Peter Chen
  Cc: linux-usb, linux-kernel, Ran Wang, stable

According to original commit c96e6725db9d6a ("usb: dwc3: gadget: Correct the
logic for queuing sgs"), we would only kick off another transfer in case of
req->num_pending_sgs > 0.

However, current logic will do this as long as req->remaining > 0, this will
include the case of non-sgs (both dwc3_gadget_ep_request_completed(req) and
req->num_pending_sgs are 0) that we did not want to.

Without this fix, we observed dwc3 got stuck on Layerscape plaftorms (such as
LS1088ARDB) when enabling gadget (mass storage function) as below:

[   27.923959] Mass Storage Function, version: 2009/09/11
[   27.929115] LUN: removable file: (no medium)
[   27.933432] LUN: file: /run/media/sda1/419/test
[   27.937963] Number of LUNs=1
[   27.941042] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
[   27.948019] g_mass_storage gadget: userspace failed to provide iSerialNumber
[   27.955069] g_mass_storage gadget: g_mass_storage ready
[   28.411188] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[   48.319766] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[   68.320794] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[   88.319898] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[  108.320808] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[  128.323419] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[  148.320857] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
[  148.362023] g_mass_storage gadget: super-speed config #0: unconfigured

Fixes: 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition")

Cc: stable@vger.kernel.org
Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
---
 drivers/usb/dwc3/gadget.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 0c960a9..5b0f02f 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -2491,7 +2491,7 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
 
 	req->request.actual = req->request.length - req->remaining;
 
-	if (!dwc3_gadget_ep_request_completed(req) ||
+	if (!dwc3_gadget_ep_request_completed(req) &&
 			req->num_pending_sgs) {
 		__dwc3_gadget_kick_transfer(dep);
 		goto out;
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] usb: dwc3: gadget: Fix controller get stuck when kicking extra transfer in wrong case
  2020-01-07  7:14 [PATCH] usb: dwc3: gadget: Fix controller get stuck when kicking extra transfer in wrong case Ran Wang
@ 2020-01-07 10:15 ` Tejas Joglekar
  2020-01-08  2:38   ` Ran Wang
  2020-01-09  9:05   ` Felipe Balbi
  0 siblings, 2 replies; 4+ messages in thread
From: Tejas Joglekar @ 2020-01-07 10:15 UTC (permalink / raw)
  To: Ran Wang, Felipe Balbi, Greg Kroah-Hartman, Tejas Joglekar,
	Jun Li, Peter Chen
  Cc: linux-usb, linux-kernel, stable, Thinh Nguyen

Hi,
On 1/7/2020 12:44 PM, Ran Wang wrote:
> According to original commit c96e6725db9d6a ("usb: dwc3: gadget: Correct the
> logic for queuing sgs"), we would only kick off another transfer in case of
> req->num_pending_sgs > 0.
> 
The commit 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition") fixes the commit f38e35dd84e2 (usb: dwc3: gadget: split dwc3_gadget_ep_cleanup_completed_requests()).

> However, current logic will do this as long as req->remaining > 0, this will
> include the case of non-sgs (both dwc3_gadget_ep_request_completed(req) and
> req->num_pending_sgs are 0) that we did not want to.
> 
> Without this fix, we observed dwc3 got stuck on Layerscape plaftorms (such as
> LS1088ARDB) when enabling gadget (mass storage function) as below:
>
Similar issue was reported by Thinh after my fix, and he has submitted a patch for the same. You can refer the discussion https://patchwork.kernel.org/patch/11292087/.
 
> [   27.923959] Mass Storage Function, version: 2009/09/11
> [   27.929115] LUN: removable file: (no medium)
> [   27.933432] LUN: file: /run/media/sda1/419/test
> [   27.937963] Number of LUNs=1
> [   27.941042] g_mass_storage gadget: Mass Storage Gadget, version: 2009/09/11
> [   27.948019] g_mass_storage gadget: userspace failed to provide iSerialNumber
> [   27.955069] g_mass_storage gadget: g_mass_storage ready
> [   28.411188] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [   48.319766] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [   68.320794] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [   88.319898] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [  108.320808] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [  128.323419] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [  148.320857] g_mass_storage gadget: super-speed config #1: Linux File-Backed Storage
> [  148.362023] g_mass_storage gadget: super-speed config #0: unconfigured
> 
> Fixes: 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition")
> 
> Cc: stable@vger.kernel.org
> Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
> ---
>  drivers/usb/dwc3/gadget.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 0c960a9..5b0f02f 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -2491,7 +2491,7 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
>  
>  	req->request.actual = req->request.length - req->remaining;
>  
> -	if (!dwc3_gadget_ep_request_completed(req) ||
> +	if (!dwc3_gadget_ep_request_completed(req) &&
>  			req->num_pending_sgs) {
>  		__dwc3_gadget_kick_transfer(dep);
>  		goto out;
> 

Thanks & Regards,
 Tejas Joglekar

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: [PATCH] usb: dwc3: gadget: Fix controller get stuck when kicking extra transfer in wrong case
  2020-01-07 10:15 ` Tejas Joglekar
@ 2020-01-08  2:38   ` Ran Wang
  2020-01-09  9:05   ` Felipe Balbi
  1 sibling, 0 replies; 4+ messages in thread
From: Ran Wang @ 2020-01-08  2:38 UTC (permalink / raw)
  To: Tejas Joglekar, Felipe Balbi, Greg Kroah-Hartman, Jun Li, Peter Chen
  Cc: linux-usb, linux-kernel, stable, Thinh Nguyen

Hi Tejas,


On Tuesday, January 07, 2020 18:16, Tejas Joglekar wrote:
> Hi,
> On 1/7/2020 12:44 PM, Ran Wang wrote:
> > According to original commit c96e6725db9d6a ("usb: dwc3: gadget:
> > Correct the logic for queuing sgs"), we would only kick off another
> > transfer in case of
> > req->num_pending_sgs > 0.
> >
> The commit 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition") fixes
> the commit f38e35dd84e2 (usb: dwc3: gadget: split
> dwc3_gadget_ep_cleanup_completed_requests()).

Yes, actually I have tried to dig the history of this implementation as much as I can.
and the commit I mentioned looks like the first one to add this function.
 
> > However, current logic will do this as long as req->remaining > 0,
> > this will include the case of non-sgs (both
> > dwc3_gadget_ep_request_completed(req) and
> > req->num_pending_sgs are 0) that we did not want to.
> >
> > Without this fix, we observed dwc3 got stuck on Layerscape plaftorms
> > (such as
> > LS1088ARDB) when enabling gadget (mass storage function) as below:
> >
> Similar issue was reported by Thinh after my fix, and he has submitted a
> patch for the same. You can refer the discussion
> https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpatch
> work.kernel.org%2Fpatch%2F11292087%2F&amp;data=02%7C01%7Cran.wan
> g_1%40nxp.com%7C97345f38c19849e5a82608d7935a8d31%7C686ea1d3bc2b
> 4c6fa92cd99c5c301635%7C0%7C0%7C637139889495749889&amp;sdata=tcV6
> FWjqvYYO7BCByACqAg%2FB%2B%2Fz3NC%2B20%2BIEVuyfJc4%3D&amp;reser
> ved=0.

Thanks for this information. I will follow that thread.

Regards,
Ran

> > [   27.923959] Mass Storage Function, version: 2009/09/11
> > [   27.929115] LUN: removable file: (no medium)
> > [   27.933432] LUN: file: /run/media/sda1/419/test
> > [   27.937963] Number of LUNs=1
> > [   27.941042] g_mass_storage gadget: Mass Storage Gadget, version:
> 2009/09/11
> > [   27.948019] g_mass_storage gadget: userspace failed to provide
> iSerialNumber
> > [   27.955069] g_mass_storage gadget: g_mass_storage ready
> > [   28.411188] g_mass_storage gadget: super-speed config #1: Linux File-
> Backed Storage
> > [   48.319766] g_mass_storage gadget: super-speed config #1: Linux File-
> Backed Storage
> > [   68.320794] g_mass_storage gadget: super-speed config #1: Linux File-
> Backed Storage
> > [   88.319898] g_mass_storage gadget: super-speed config #1: Linux File-
> Backed Storage
> > [  108.320808] g_mass_storage gadget: super-speed config #1: Linux
> > File-Backed Storage [  128.323419] g_mass_storage gadget: super-speed
> > config #1: Linux File-Backed Storage [  148.320857] g_mass_storage
> > gadget: super-speed config #1: Linux File-Backed Storage [
> > 148.362023] g_mass_storage gadget: super-speed config #0: unconfigured
> >
> > Fixes: 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition")
> >
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Ran Wang <ran.wang_1@nxp.com>
> > ---
> >  drivers/usb/dwc3/gadget.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> > index 0c960a9..5b0f02f 100644
> > --- a/drivers/usb/dwc3/gadget.c
> > +++ b/drivers/usb/dwc3/gadget.c
> > @@ -2491,7 +2491,7 @@ static int
> > dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep,
> >
> >  	req->request.actual = req->request.length - req->remaining;
> >
> > -	if (!dwc3_gadget_ep_request_completed(req) ||
> > +	if (!dwc3_gadget_ep_request_completed(req) &&
> >  			req->num_pending_sgs) {
> >  		__dwc3_gadget_kick_transfer(dep);
> >  		goto out;
> >
> 
> Thanks & Regards,
>  Tejas Joglekar

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] usb: dwc3: gadget: Fix controller get stuck when kicking extra transfer in wrong case
  2020-01-07 10:15 ` Tejas Joglekar
  2020-01-08  2:38   ` Ran Wang
@ 2020-01-09  9:05   ` Felipe Balbi
  1 sibling, 0 replies; 4+ messages in thread
From: Felipe Balbi @ 2020-01-09  9:05 UTC (permalink / raw)
  To: Tejas Joglekar, Ran Wang, Greg Kroah-Hartman, Tejas Joglekar,
	Jun Li, Peter Chen
  Cc: linux-usb, linux-kernel, stable, Thinh Nguyen

[-- Attachment #1: Type: text/plain, Size: 1214 bytes --]


Hi,

(Tejas, please break your lines at 80-columns. You shouldn't have to be
reminded of this)

Tejas Joglekar <Tejas.Joglekar@synopsys.com> writes:

> Hi,
> On 1/7/2020 12:44 PM, Ran Wang wrote:
>> According to original commit c96e6725db9d6a ("usb: dwc3: gadget: Correct the
>> logic for queuing sgs"), we would only kick off another transfer in case of
>> req->num_pending_sgs > 0.
>> 
> The commit 8c7d4b7b3d43 ("usb: dwc3: gadget: Fix logical condition")
> fixes the commit f38e35dd84e2 (usb: dwc3: gadget: split
> dwc3_gadget_ep_cleanup_completed_requests()).
>
>> However, current logic will do this as long as req->remaining > 0, this will
>> include the case of non-sgs (both dwc3_gadget_ep_request_completed(req) and
>> req->num_pending_sgs are 0) that we did not want to.
>> 
>> Without this fix, we observed dwc3 got stuck on Layerscape plaftorms (such as
>> LS1088ARDB) when enabling gadget (mass storage function) as below:
>>
> Similar issue was reported by Thinh after my fix, and he has submitted
> a patch for the same. You can refer the discussion
> https://patchwork.kernel.org/patch/11292087/.

Based on this, I'm assuming we don't need this patch.

-- 
balbi

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-01-09  9:04 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-07  7:14 [PATCH] usb: dwc3: gadget: Fix controller get stuck when kicking extra transfer in wrong case Ran Wang
2020-01-07 10:15 ` Tejas Joglekar
2020-01-08  2:38   ` Ran Wang
2020-01-09  9:05   ` Felipe Balbi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).