Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 56092bd5 authored by Felipe Balbi's avatar Felipe Balbi Committed by Greg Kroah-Hartman
Browse files

usb: dwc3: gadget: use num_trbs when skipping TRBs on ->dequeue()



commit c3acd59014148470dc58519870fbc779785b4bf7 upstream

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.

Cc: Fei Yang <fei.yang@intel.com>
Cc: Sam Protsenko <semen.protsenko@linaro.org>
Cc: Felipe Balbi <balbi@kernel.org>
Cc: linux-usb@vger.kernel.org
Cc: stable@vger.kernel.org # 4.19.y
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
(cherry picked from commit c3acd59014148470dc58519870fbc779785b4bf7)
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 2a2b1c4d
Loading
Loading
Loading
Loading
+4 −24
Original line number Diff line number Diff line
@@ -1368,6 +1368,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);

@@ -1405,33 +1407,13 @@ 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->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;
		}
		dev_err(dwc->dev, "request %pK was not queued to %s\n",
@@ -1441,8 +1423,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
	}

out1:
	/* giveback the request */

	dwc3_gadget_giveback(dep, req, -ECONNRESET);

out0: