|
@@ -1884,27 +1884,32 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep,
|
|
|
unsigned int i;
|
|
|
int ret;
|
|
|
|
|
|
- req = next_request(&dep->req_queued);
|
|
|
- if (!req) {
|
|
|
- WARN_ON_ONCE(1);
|
|
|
- return 1;
|
|
|
- }
|
|
|
- i = 0;
|
|
|
do {
|
|
|
- slot = req->start_slot + i;
|
|
|
- if ((slot == DWC3_TRB_NUM - 1) &&
|
|
|
+ req = next_request(&dep->req_queued);
|
|
|
+ if (!req) {
|
|
|
+ WARN_ON_ONCE(1);
|
|
|
+ return 1;
|
|
|
+ }
|
|
|
+ i = 0;
|
|
|
+ do {
|
|
|
+ slot = req->start_slot + i;
|
|
|
+ if ((slot == DWC3_TRB_NUM - 1) &&
|
|
|
usb_endpoint_xfer_isoc(dep->endpoint.desc))
|
|
|
- slot++;
|
|
|
- slot %= DWC3_TRB_NUM;
|
|
|
- trb = &dep->trb_pool[slot];
|
|
|
+ slot++;
|
|
|
+ slot %= DWC3_TRB_NUM;
|
|
|
+ trb = &dep->trb_pool[slot];
|
|
|
+
|
|
|
+ ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb,
|
|
|
+ event, status);
|
|
|
+ if (ret)
|
|
|
+ break;
|
|
|
+ } while (++i < req->request.num_mapped_sgs);
|
|
|
+
|
|
|
+ dwc3_gadget_giveback(dep, req, status);
|
|
|
|
|
|
- ret = __dwc3_cleanup_done_trbs(dwc, dep, req, trb,
|
|
|
- event, status);
|
|
|
if (ret)
|
|
|
break;
|
|
|
- } while (++i < req->request.num_mapped_sgs);
|
|
|
-
|
|
|
- dwc3_gadget_giveback(dep, req, status);
|
|
|
+ } while (1);
|
|
|
|
|
|
if (usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
|
|
|
list_empty(&dep->req_queued)) {
|