On Mon, 14 Sep 2015, Igor Kotrasinski wrote:

> currently, when a zlp flag is set and an urb/usb_request
> buffer is filled without a short packet, transfer() leaves
> its status at -EINPROGRESS and does not rescan for short
> packet.
> 
> In a scenario where ep.maxpacket bytes are copied,
> URB_ZERO_PACKET is set, urb buffer is filled and usb_request
> buffer is not, transfer() returns with an urb with
> -EINPROGRESS status, which dummy_hcd treats as incomplete
> transfer.
> 
> Check for zlp and rescan appropriately.
> 
> Signed-off-by: Igor Kotrasinski <i.kotrasi...@samsung.com>
> ---
>  drivers/usb/gadget/udc/dummy_hcd.c | 24 ++++++++++++++++--------
>  1 file changed, 16 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/usb/gadget/udc/dummy_hcd.c 
> b/drivers/usb/gadget/udc/dummy_hcd.c
> index 181112c..59be03e 100644
> --- a/drivers/usb/gadget/udc/dummy_hcd.c
> +++ b/drivers/usb/gadget/udc/dummy_hcd.c
> @@ -1364,15 +1364,23 @@ top:
>                                       req->req.status = 0;
>                       }
>  
> -             /* many requests terminate without a short packet */
> +             /* many requests terminate without a short packet.
> +              * send a zlp if demanded by flags.
> +              */

The style we are using now for multi-line comments is like this:

                /*
                 * blah, blah, blah
                 * blah, blah, blah
                 */

I realize that's not how the existing comments look, but we try to
enforce this style for all new comments.

>               } else {
> -                     if (req->req.length == req->req.actual
> -                                     && !req->req.zero)
> -                             req->req.status = 0;
> -                     if (urb->transfer_buffer_length == urb->actual_length
> -                                     && !(urb->transfer_flags
> -                                             & URB_ZERO_PACKET))
> -                             *status = 0;
> +                     if (req->req.length == req->req.actual) {
> +                             if (req->req.zero && to_host)
> +                                     rescan = 1;
> +                             else
> +                                     req->req.status = 0;
> +                     }
> +                     if (urb->transfer_buffer_length == urb->actual_length) {
> +                             if (urb->transfer_flags & URB_ZERO_PACKET &&
> +                                 !to_host)
> +                                     rescan = 1;
> +                             else
> +                                     *status = 0;
> +                     }
>               }
>  
>               /* device side completion --> continuable */

Apart from that style issue,

Acked-by: Alan Stern <st...@rowland.harvard.edu>

Alan Stern

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to