| From 00e21763f2c8cab21b7befa52996d1b18bde5c42 Mon Sep 17 00:00:00 2001 |
| From: John Stultz <john.stultz@linaro.org> |
| Date: Mon, 4 May 2020 23:12:15 +0000 |
| Subject: dwc3: Remove check for HWO flag in dwc3_gadget_ep_reclaim_trb_sg() |
| |
| From: John Stultz <john.stultz@linaro.org> |
| |
| commit 00e21763f2c8cab21b7befa52996d1b18bde5c42 upstream. |
| |
| The check for the HWO flag in dwc3_gadget_ep_reclaim_trb_sg() |
| causes us to break out of the loop before we call |
| dwc3_gadget_ep_reclaim_completed_trb(), which is what likely |
| should be clearing the HWO flag. |
| |
| This can cause odd behavior where we never reclaim all the trbs |
| in the sg list, so we never call giveback on a usb req, and that |
| will causes transfer stalls. |
| |
| This effectively resovles the adb stalls seen on HiKey960 |
| after userland changes started only using AIO in adbd. |
| |
| Cc: YongQin Liu <yongqin.liu@linaro.org> |
| Cc: Anurag Kumar Vulisha <anurag.kumar.vulisha@xilinx.com> |
| Cc: Yang Fei <fei.yang@intel.com> |
| Cc: Thinh Nguyen <thinhn@synopsys.com> |
| Cc: Tejas Joglekar <tejas.joglekar@synopsys.com> |
| Cc: Andrzej Pietrasiewicz <andrzej.p@collabora.com> |
| Cc: Jack Pham <jackp@codeaurora.org> |
| Cc: Josh Gao <jmgao@google.com> |
| Cc: Todd Kjos <tkjos@google.com> |
| Cc: Felipe Balbi <balbi@kernel.org> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: linux-usb@vger.kernel.org |
| Cc: stable@vger.kernel.org #4.20+ |
| Signed-off-by: John Stultz <john.stultz@linaro.org> |
| Signed-off-by: Felipe Balbi <balbi@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/dwc3/gadget.c | 3 --- |
| 1 file changed, 3 deletions(-) |
| |
| --- a/drivers/usb/dwc3/gadget.c |
| +++ b/drivers/usb/dwc3/gadget.c |
| @@ -2483,9 +2483,6 @@ static int dwc3_gadget_ep_reclaim_trb_sg |
| for_each_sg(sg, s, pending, i) { |
| trb = &dep->trb_pool[dep->trb_dequeue]; |
| |
| - if (trb->ctrl & DWC3_TRB_CTRL_HWO) |
| - break; |
| - |
| req->sg = sg_next(s); |
| req->num_pending_sgs--; |
| |