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).


Clemens


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to