On Tue, Aug 09, 2011 at 05:02:39PM +0200, Sebastian Andrzej Siewior wrote: > Executing > | testusb -a -c 1 -t 3 -v 421 -s 2048 > > does not complete on the gadget side. > g_zero enqueues a 4096 bytes long buffer. The host sends 2048bytes which > is a multiple of wMaxPacketSize. The host is done with sending data but > the gadget waits for more. > Since the protocol does not include a transfer-length-field sending a > terminating zero packet seems the only way out. > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > --- > drivers/usb/misc/usbtest.c | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c > index bb10846..bd71500 100644 > --- a/drivers/usb/misc/usbtest.c > +++ b/drivers/usb/misc/usbtest.c > @@ -359,8 +359,10 @@ static int simple_io( > urb->context = &completion; > while (retval == 0 && iterations-- > 0) { > init_completion(&completion); > - if (usb_pipeout(urb->pipe)) > + if (usb_pipeout(urb->pipe)) { > simple_fill_buf(urb); > + urb->transfer_flags |= URB_ZERO_PACKET; > + } > retval = usb_submit_urb(urb, GFP_KERNEL); > if (retval != 0) > break; this looks good to me, as of today, the only way to pass testusb is to cancel requests when we start the next one, rather then having them completed. Adding a ZLP on the requests, will force the requests to complete even though they have a size which is aligned to wMaxPacketSize, which allow us to remove the hackish abort transfer on all UDCs. FWIW: Reviewed-by: Felipe Balbi <balbi@xxxxxx> -- balbi
Attachment:
signature.asc
Description: Digital signature