Re: [PATCH v2 2/2] usb: dwc3: gadget: when the started list is empty stop the active xfer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

Michael Grzeschik wrote:
> When we have nothing left to be queued after handling the last trb
> we have to stop the current transfer. This way we can ensure that
> the next request will be queued with an new and valid timestamp
> and will not directly run into an missed xfer.
>
> Signed-off-by: Michael Grzeschik <m.grzeschik@xxxxxxxxxxxxxx>
>
> ---
> v1 -> v2: - This Patch replaces the following patch by Michael Olbrich:
>              usb: dwc3: gadget: restart the transfer if a isoc request is queued too late
>
>   drivers/usb/dwc3/gadget.c | 5 ++++-
>   1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
> index 0962ddd7fbf6ae6..b2b8b911ac79b39 100644
> --- a/drivers/usb/dwc3/gadget.c
> +++ b/drivers/usb/dwc3/gadget.c
> @@ -2729,7 +2729,10 @@ static bool dwc3_gadget_endpoint_trbs_complete(struct dwc3_ep *dep,
>   	if (dep->flags & DWC3_EP_END_TRANSFER_PENDING)
>   		goto out;
>   
> -	if (status == -EXDEV && list_empty(&dep->started_list))
> +	if ((status == -EXDEV && list_empty(&dep->started_list)) ||
> +		(usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
> +			list_empty(&dep->started_list) &&
> +			list_empty(&dep->pending_list)))

The -EXDEV check is also for isoc, maybe rearrange this for easier read:
if (usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
     list_empty(&dep->started_list) &&
     (list_empty(&dep->pending_list) || status == -EXDEV))

>   		dwc3_stop_active_transfer(dep, true, true);
>   	else if (dwc3_gadget_ep_should_continue(dep))
>   		if (__dwc3_gadget_kick_transfer(dep, false) == 0)

BR,
Thinh





[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux