usb: dwc3: gadget: Return early if no TRB update
authorThinh Nguyen <Thinh.Nguyen@synopsys.com>
Thu, 1 Oct 2020 00:44:38 +0000 (17:44 -0700)
committerFelipe Balbi <balbi@kernel.org>
Fri, 2 Oct 2020 06:57:46 +0000 (09:57 +0300)
If the transfer had already started and there's no TRB to update, then
there's no need to go through __dwc3_gadget_kick_transfer(). There is
no problem reissuing UPDATE_TRANSFER command. This change just saves
the driver from doing a few operations. This happens when we run out of
TRB and function driver still queues for more requests.

Signed-off-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Signed-off-by: Felipe Balbi <balbi@kernel.org>
drivers/usb/dwc3/gadget.c

index ff924656f6908c0b5c818feeacce3009da1ea972..da1f2ad2ad90b560d196155e1dc6e8e4780a1bac 100644 (file)
@@ -1347,6 +1347,13 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
 
        starting = !(dep->flags & DWC3_EP_TRANSFER_STARTED);
 
+       /*
+        * If there's no new TRB prepared and we don't need to restart a
+        * transfer, there's no need to update the transfer.
+        */
+       if (!ret && !starting)
+               return ret;
+
        req = next_request(&dep->started_list);
        if (!req) {
                dep->flags |= DWC3_EP_PENDING_REQUEST;