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

Commit 33cc36a5 authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: dwc3: gadget: Properly handle failed kick_transfer"

parents e3105f1e 6a247993
Loading
Loading
Loading
Loading
+11 −8
Original line number Diff line number Diff line
@@ -1444,6 +1444,8 @@ static void dwc3_prepare_trbs(struct dwc3_ep *dep)
	}
}

static void dwc3_gadget_ep_cleanup_cancelled_requests(struct dwc3_ep *dep);

static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
{
	struct dwc3_gadget_ep_cmd_params params;
@@ -1511,14 +1513,15 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
			return ret;
		}

		/*
		 * FIXME we need to iterate over the list of requests
		 * here and stop, unmap, free and del each of the linked
		 * requests instead of what we do now.
		 */
		if (req->trb)
			memset(req->trb, 0, sizeof(struct dwc3_trb));
		dwc3_gadget_del_and_unmap_request(dep, req, ret);
		dwc3_stop_active_transfer(dwc, dep->number, true);

		list_for_each_entry_safe(req, n, &dep->started_list, list)
			dwc3_gadget_move_cancelled_request(req);

		/* If ep isn't started, then there's no end transfer pending */
		if (!(dep->flags & DWC3_EP_END_TRANSFER_PENDING))
			dwc3_gadget_ep_cleanup_cancelled_requests(dep);

		return ret;
	}