Message ID | 20190702080126.031346654@linuxfoundation.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | None | expand |
On Tue, Jul 02, 2019 at 10:01:27AM +0200, Greg Kroah-Hartman wrote: >commit c3acd59014148470dc58519870fbc779785b4bf7 upstream > >Now that we track how many TRBs a request uses, it's easier to skip >over them in case of a call to usb_ep_dequeue(). Let's do so and >simplify the code a bit. > >Cc: Fei Yang <fei.yang@intel.com> >Cc: Sam Protsenko <semen.protsenko@linaro.org> >Cc: Felipe Balbi <balbi@kernel.org> >Cc: linux-usb@vger.kernel.org >Cc: stable@vger.kernel.org # 4.19.y >Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> >(cherry picked from commit c3acd59014148470dc58519870fbc779785b4bf7) >Signed-off-by: John Stultz <john.stultz@linaro.org> >Signed-off-by: Sasha Levin <sashal@kernel.org> This one has an upstream fix: c7152763f02e05567da27462b2277a554e507c89 ("usb: dwc3: Reset num_trbs after skipping"). -- Thanks, Sasha
On Tue, Jul 02, 2019 at 10:03:12PM -0400, Sasha Levin wrote: > On Tue, Jul 02, 2019 at 10:01:27AM +0200, Greg Kroah-Hartman wrote: > > commit c3acd59014148470dc58519870fbc779785b4bf7 upstream > > > > Now that we track how many TRBs a request uses, it's easier to skip > > over them in case of a call to usb_ep_dequeue(). Let's do so and > > simplify the code a bit. > > > > Cc: Fei Yang <fei.yang@intel.com> > > Cc: Sam Protsenko <semen.protsenko@linaro.org> > > Cc: Felipe Balbi <balbi@kernel.org> > > Cc: linux-usb@vger.kernel.org > > Cc: stable@vger.kernel.org # 4.19.y > > Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> > > (cherry picked from commit c3acd59014148470dc58519870fbc779785b4bf7) > > Signed-off-by: John Stultz <john.stultz@linaro.org> > > Signed-off-by: Sasha Levin <sashal@kernel.org> > > This one has an upstream fix: c7152763f02e05567da27462b2277a554e507c89 > ("usb: dwc3: Reset num_trbs after skipping"). You were the one who queued this series up :) I'll go add this one now... thanks, greg k-h
On Wed, Jul 03, 2019 at 09:20:12AM +0200, Greg Kroah-Hartman wrote: >On Tue, Jul 02, 2019 at 10:03:12PM -0400, Sasha Levin wrote: >> On Tue, Jul 02, 2019 at 10:01:27AM +0200, Greg Kroah-Hartman wrote: >> > commit c3acd59014148470dc58519870fbc779785b4bf7 upstream >> > >> > Now that we track how many TRBs a request uses, it's easier to skip >> > over them in case of a call to usb_ep_dequeue(). Let's do so and >> > simplify the code a bit. >> > >> > Cc: Fei Yang <fei.yang@intel.com> >> > Cc: Sam Protsenko <semen.protsenko@linaro.org> >> > Cc: Felipe Balbi <balbi@kernel.org> >> > Cc: linux-usb@vger.kernel.org >> > Cc: stable@vger.kernel.org # 4.19.y >> > Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com> >> > (cherry picked from commit c3acd59014148470dc58519870fbc779785b4bf7) >> > Signed-off-by: John Stultz <john.stultz@linaro.org> >> > Signed-off-by: Sasha Levin <sashal@kernel.org> >> >> This one has an upstream fix: c7152763f02e05567da27462b2277a554e507c89 >> ("usb: dwc3: Reset num_trbs after skipping"). > >You were the one who queued this series up :) Indeed, and I'm actually quite happy about this. Even though I goofed up and didn't notice the fix when it got queued up, the automation we have in place to catch these cases worked and we were able to get the fix in as well before release. -- Thanks, Sasha
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index fd91c494307c..4e08904890ed 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1368,6 +1368,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, break; } if (r == req) { + int i; + /* wait until it is processed */ dwc3_stop_active_transfer(dep, true); @@ -1405,32 +1407,12 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, if (!r->trb) goto out0; - if (r->num_pending_sgs) { + for (i = 0; i < r->num_trbs; i++) { struct dwc3_trb *trb; - int i = 0; - - for (i = 0; i < r->num_pending_sgs; i++) { - trb = r->trb + i; - trb->ctrl &= ~DWC3_TRB_CTRL_HWO; - dwc3_ep_inc_deq(dep); - } - - if (r->needs_extra_trb) { - trb = r->trb + r->num_pending_sgs + 1; - trb->ctrl &= ~DWC3_TRB_CTRL_HWO; - dwc3_ep_inc_deq(dep); - } - } else { - struct dwc3_trb *trb = r->trb; + trb = r->trb + i; trb->ctrl &= ~DWC3_TRB_CTRL_HWO; dwc3_ep_inc_deq(dep); - - if (r->needs_extra_trb) { - trb = r->trb + 1; - trb->ctrl &= ~DWC3_TRB_CTRL_HWO; - dwc3_ep_inc_deq(dep); - } } goto out1; } @@ -1441,8 +1423,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, } out1: - /* giveback the request */ - dwc3_gadget_giveback(dep, req, -ECONNRESET); out0: