usb: dwc3: gadget: stop processing on HWO set
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Wed, 10 Aug 2016 15:07:46 +0000 (18:07 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Thu, 11 Aug 2016 12:09:48 +0000 (15:09 +0300)
stop consuming TRBs when we reach one with HWO bit
already set. This will prevent us from prematurely
retiring a TRB.

Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc3/gadget.c

index 7a4d4d2534d4970854004900c9ea8be61a26b76b..1f5597ef945d409282cbeb4caf6c981ea8b1cade 100644 (file)
@@ -1979,16 +1979,7 @@ static int __dwc3_cleanup_done_trbs(struct dwc3 *dwc, struct dwc3_ep *dep,
                trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
 
        if ((trb->ctrl & DWC3_TRB_CTRL_HWO) && status != -ESHUTDOWN)
-               /*
-                * We continue despite the error. There is not much we
-                * can do. If we don't clean it up we loop forever. If
-                * we skip the TRB then it gets overwritten after a
-                * while since we use them in a ring buffer. A BUG()
-                * would help. Lets hope that if this occurs, someone
-                * fixes the root cause instead of looking away :)
-                */
-               dev_err(dwc->dev, "%s's TRB (%p) still owned by HW\n",
-                               dep->name, trb);
+               return 1;
 
        count = trb->size & DWC3_TRB_SIZE_MASK;