diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index ad6358e9556b..1f7be980e44b 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -2613,12 +2613,12 @@ static int dwc3_gadget_ep_cleanup_completed_request(struct dwc3_ep *dep, */ req->remaining = 0; req->needs_extra_trb = false; + dwc3_gadget_move_queued_request(req); if (req->trb) usb_gadget_unmap_request_by_dev(dwc->sysdev, &req->request, req->direction); req->trb = NULL; - dwc3_gadget_move_queued_request(req); } else { __dwc3_gadget_kick_transfer(dep); } diff --git a/drivers/usb/dwc3/gadget.h b/drivers/usb/dwc3/gadget.h index 540ea35fd239..ba495ace7e51 100644 --- a/drivers/usb/dwc3/gadget.h +++ b/drivers/usb/dwc3/gadget.h @@ -74,14 +74,9 @@ static inline struct dwc3_request *next_request(struct list_head *list) static inline void dwc3_gadget_move_queued_request(struct dwc3_request *req) { struct dwc3_ep *dep = req->dep; - struct dwc3_trb *trb; - u8 tmp = dep->trb_enqueue; - if (!tmp) - tmp = DWC3_TRB_NUM - 1; - - trb = &dep->trb_pool[tmp - 1]; - trb->ctrl &= ~DWC3_TRB_CTRL_HWO; + if (req->trb) + req->trb->ctrl &= ~DWC3_TRB_CTRL_HWO; req->status = DWC3_REQUEST_STATUS_QUEUED; list_move_tail(&req->list, &dep->pending_list); }