]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
usb: dwc3: gadget: use num_trbs when skipping TRBs on ->dequeue()
authorFelipe Balbi <felipe.balbi@linux.intel.com>
Wed, 1 Aug 2018 10:37:53 +0000 (13:37 +0300)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Mon, 26 Nov 2018 07:08:29 +0000 (09:08 +0200)
Now that we track how many TRBs a request uses, it's easier to skip
over them in case of a call to usb_ep_dequeue(). Let's do so and
simplify the code a bit.

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

index 70a8ff1112bbc41a285f9525cc6c0489af1642eb..1510490acfa55b075e6740e2557ec7c0ba4ffe1a 100644 (file)
@@ -1502,6 +1502,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
                                break;
                }
                if (r == req) {
+                       int i;
+
                        /* wait until it is processed */
                        dwc3_stop_active_transfer(dep, true);
 
@@ -1539,32 +1541,12 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
                        if (!r->trb)
                                goto out0;
 
-                       if (r->num_pending_sgs) {
+                       for (i = 0; i < r->num_trbs; i++) {
                                struct dwc3_trb *trb;
-                               int i = 0;
-
-                               for (i = 0; i < r->num_pending_sgs; i++) {
-                                       trb = r->trb + i;
-                                       trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
-                                       dwc3_ep_inc_deq(dep);
-                               }
-
-                               if (r->needs_extra_trb) {
-                                       trb = r->trb + r->num_pending_sgs + 1;
-                                       trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
-                                       dwc3_ep_inc_deq(dep);
-                               }
-                       } else {
-                               struct dwc3_trb *trb = r->trb;
 
+                               trb = r->trb + i;
                                trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
                                dwc3_ep_inc_deq(dep);
-
-                               if (r->needs_extra_trb) {
-                                       trb = r->trb + 1;
-                                       trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
-                                       dwc3_ep_inc_deq(dep);
-                               }
                        }
                        goto out1;
                }
@@ -1575,8 +1557,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
        }
 
 out1:
-       /* giveback the request */
-
        dwc3_gadget_giveback(dep, req, -ECONNRESET);
 
 out0: