Commit 12f41321 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull USB fix from Greg KH:
 "A single revert of a commit that caused problems in 5.14-rc5 for
  5.14-rc6. It has been in linux-next almost all week, and has resolved
  the issues that were reported on lots of different systems that were
  not the platform that the change was originally tested on (gotta love
  SoC cores used in multiple devices from multiple vendors...)"

* tag 'usb-5.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb:
  Revert "usb: dwc3: gadget: Use list_replace_init() before traversing lists"
parents 56aee573 664cc971
Loading
Loading
Loading
Loading
+2 −16
Original line number Diff line number Diff line
@@ -1741,13 +1741,9 @@ static void dwc3_gadget_ep_cleanup_cancelled_requests(struct dwc3_ep *dep)
{
	struct dwc3_request		*req;
	struct dwc3_request		*tmp;
	struct list_head		local;
	struct dwc3			*dwc = dep->dwc;

restart:
	list_replace_init(&dep->cancelled_list, &local);

	list_for_each_entry_safe(req, tmp, &local, list) {
	list_for_each_entry_safe(req, tmp, &dep->cancelled_list, list) {
		dwc3_gadget_ep_skip_trbs(dep, req);
		switch (req->status) {
		case DWC3_REQUEST_STATUS_DISCONNECTED:
@@ -1765,9 +1761,6 @@ static void dwc3_gadget_ep_cleanup_cancelled_requests(struct dwc3_ep *dep)
			break;
		}
	}

	if (!list_empty(&dep->cancelled_list))
		goto restart;
}

static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
@@ -2976,12 +2969,8 @@ static void dwc3_gadget_ep_cleanup_completed_requests(struct dwc3_ep *dep,
{
	struct dwc3_request	*req;
	struct dwc3_request	*tmp;
	struct list_head	local;

restart:
	list_replace_init(&dep->started_list, &local);

	list_for_each_entry_safe(req, tmp, &local, list) {
	list_for_each_entry_safe(req, tmp, &dep->started_list, list) {
		int ret;

		ret = dwc3_gadget_ep_cleanup_completed_request(dep, event,
@@ -2989,9 +2978,6 @@ static void dwc3_gadget_ep_cleanup_completed_requests(struct dwc3_ep *dep,
		if (ret)
			break;
	}

	if (!list_empty(&dep->started_list))
		goto restart;
}

static bool dwc3_gadget_ep_should_continue(struct dwc3_ep *dep)