From: Greg Kroah-Hartman Date: Fri, 3 Oct 2014 19:03:21 +0000 (-0700) Subject: 3.14-stable patches X-Git-Tag: v3.16.4~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=780d539c70d71b32fe544f25da5188f656e0ee4d;p=thirdparty%2Fkernel%2Fstable-queue.git 3.14-stable patches added patches: usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch --- diff --git a/queue-3.14/series b/queue-3.14/series index 7bc1673d599..a3c04affbcc 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -174,3 +174,4 @@ rtlwifi-rtl8192cu-add-new-id.patch lockd-fix-rpcbind-crash-on-lockd-startup-failure.patch lockdep-revert-lockdep-check-in-raw_seqcount_begin.patch genhd-fix-leftover-might_sleep-in-blk_free_devt.patch +usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch diff --git a/queue-3.14/usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch b/queue-3.14/usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch new file mode 100644 index 00000000000..1910b3a5d01 --- /dev/null +++ b/queue-3.14/usb-dwc3-fix-trb-completion-when-multiple-trbs-are-started.patch @@ -0,0 +1,60 @@ +From 0b93a4c838fa10370d72f86fe712426ac63804de Mon Sep 17 00:00:00 2001 +From: Felipe Balbi +Date: Thu, 4 Sep 2014 10:28:10 -0500 +Subject: usb: dwc3: fix TRB completion when multiple TRBs are started + +From: Felipe Balbi + +commit 0b93a4c838fa10370d72f86fe712426ac63804de upstream. + +After commit 2ec2a8be (usb: dwc3: gadget: +always enable IOC on bulk/interrupt transfers) +we created a situation where it was possible to +hang a bulk/interrupt endpoint if we had more +than one pending request in our queue and they +were both started with a single Start Transfer +command. + +The problems triggers because we had not enabled +Transfer In Progress event for those endpoints +and we were not able to process early giveback +of requests completed without LST bit set. + +Fix the problem by finally enabling Xfer In Progress +event for all endpoint types, except control. + +Fixes: 2ec2a8be (usb: dwc3: gadget: always + enable IOC on bulk/interrupt transfers) +Reported-by: Pratyush Anand +Signed-off-by: Felipe Balbi +Signed-off-by: Greg Kroah-Hartman + + +--- + drivers/usb/dwc3/gadget.c | 8 +------- + 1 file changed, 1 insertion(+), 7 deletions(-) + +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -445,7 +445,7 @@ static int dwc3_gadget_set_ep_config(str + dep->stream_capable = true; + } + +- if (usb_endpoint_xfer_isoc(desc)) ++ if (!usb_endpoint_xfer_control(desc)) + params.param1 |= DWC3_DEPCFG_XFER_IN_PROGRESS_EN; + + /* +@@ -1937,12 +1937,6 @@ static void dwc3_endpoint_interrupt(stru + dwc3_endpoint_transfer_complete(dwc, dep, event, 1); + break; + case DWC3_DEPEVT_XFERINPROGRESS: +- if (!usb_endpoint_xfer_isoc(dep->endpoint.desc)) { +- dev_dbg(dwc->dev, "%s is not an Isochronous endpoint\n", +- dep->name); +- return; +- } +- + dwc3_endpoint_transfer_complete(dwc, dep, event, 0); + break; + case DWC3_DEPEVT_XFERNOTREADY: