On Mon, Jul 01, 2002, Clemens Ladisch <[EMAIL PROTECTED]> wrote:
> In Linux 2.4.18 with usb-uhci (v1.275), the following code will create
> a TD with wrong toggle bit:
> 
>         urb->pipe = rcvbulkpipe( ... );
>         urb->dev = dev;
>         usb_submit_urb(urb);
> 
>         /* optionally: receive some data and resubmit the urb */
> 
>         usb_unlink_urb(urb);
> 
>         urb->dev = dev;
>         usb_submit_urb(urb);
> 
> The submit call before the unlink will toggle the D0/D1 bit in
> dev->toggle[]. The call after the unlink will then use the toggled bit
> although the TD of the unlinked URB hasn't been completed successfully.
> Consequently, the next packet to be received will be lost.
> 
> (the code may look silly, but it is the equivalent of executing
>  insmod; ... rmmod; insmod)
> 
> The same happens with uhci (v1.1).

Are you sure the TD didn't complete? uhci.c explicitly checks for that
situation. While I won't claim it's completely bugfree, I think it's
right.

How did you determine the data toggle was the problem? A bus analyzer?

JE



-------------------------------------------------------
Sponsored by:
ThinkGeek at http://www.ThinkGeek.com/
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to