lkml.org 
[lkml]   [2013]   [Nov]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCHv2 2/2] check quirk to pad epout buf size when not aligned to maxpacketsize
On Mon, 11 Nov 2013, David Cohen wrote:

> Hi Alan, Michal,
>
> On 11/11/2013 01:09 PM, Michal Nazarewicz wrote:
> > On Mon, Nov 11 2013, Alan Stern wrote:
> >> On Mon, 11 Nov 2013, Michal Nazarewicz wrote:
> >>
> >>> Check gadget.quirk_ep_out_aligned_size to decide if buffer size requires
> >>> to be aligned to maxpacketsize of an out endpoint. ffs_epfile_io() needs
> >>> to pad epout buffer to match above condition if quirk is found.
> >>>
> >>> Signed-off-by: Michal Nazarewicz <mina86@mina86.com>
> >>
> >> I think this is still wrong.
> >>
> >>> @@ -824,7 +832,7 @@ static ssize_t ffs_epfile_io(struct file *file,
> >>> req->context = &done;
> >>> req->complete = ffs_epfile_io_complete;
> >>> req->buf = data;
> >>> - req->length = len;
> >>> + req->length = data_len;
> >>
> >> IIUC, req->length should still be set to len, not to data_len.
>
> I misunderstood the first time I read it:
> In order to avoid DWC3 to stall, we need to update req->length (this is
> the most important fix). kmalloc() is updated too to prevent USB
> controller to overflow buffer boundaries.

Here I disagree.

If the DWC3 hardware stalls, it is up to the DWC3 UDC driver to fix it.
Gadget drivers should not have to worry. Most especially, gadget
drivers should not lie about a request length.

If the UDC driver decides to round up req->length before sending it to
the hardware, that's okay. But req->length should be set to len, not
data_len. And if the hardware receives more than len bytes of data,
the UDC driver should set req->status to -EOVERFLOW.

Alan Stern



\
 
 \ /
  Last update: 2013-11-12 17:21    [W:0.120 / U:0.084 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site