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

Commit 16b13b9a authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "USB: dwc3-msm: Check endpoint status and request queued or not first"

parents b107c0ad f98c76a7
Loading
Loading
Loading
Loading
+27 −21
Original line number Diff line number Diff line
@@ -671,6 +671,33 @@ static int dwc3_msm_ep_queue(struct usb_ep *ep,
		return -EINVAL;
	}

	spin_lock_irqsave(&dwc->lock, flags);
	if (!dep->endpoint.desc) {
		dev_err(mdwc->dev,
			"%s: trying to queue request %p to disabled ep %s\n",
			__func__, request, ep->name);
		return -EPERM;
	}

	if (dep->number == 0 || dep->number == 1) {
		dev_err(mdwc->dev,
			"%s: trying to queue dbm request %p to control ep %s\n",
			__func__, request, ep->name);
		return -EPERM;
	}


	if (dep->busy_slot != dep->free_slot || !list_empty(&dep->request_list)
					 || !list_empty(&dep->req_queued)) {
		dev_err(mdwc->dev,
			"%s: trying to queue dbm request %p tp ep %s\n",
			__func__, request, ep->name);
		return -EPERM;
	}
	dep->busy_slot = 0;
	dep->free_slot = 0;

	spin_unlock_irqrestore(&dwc->lock, flags);
	/*
	 * Override req->complete function, but before doing that,
	 * store it's original pointer in the req_complete_list.
@@ -709,27 +736,6 @@ static int dwc3_msm_ep_queue(struct usb_ep *ep,
		goto err;
	}

	if (dep->number == 0 || dep->number == 1) {
		dev_err(mdwc->dev,
			"%s: trying to queue dbm request %p to control ep %s\n",
			__func__, request, ep->name);
		ret = -EPERM;
		goto err;
	}


	if (dep->busy_slot != dep->free_slot || !list_empty(&dep->request_list)
					 || !list_empty(&dep->req_queued)) {
		dev_err(mdwc->dev,
			"%s: trying to queue dbm request %p tp ep %s\n",
			__func__, request, ep->name);
		ret = -EPERM;
		goto err;
	} else {
		dep->busy_slot = 0;
		dep->free_slot = 0;
	}

	ret = __dwc3_msm_ep_queue(dep, req);
	if (ret < 0) {
		dev_err(mdwc->dev,