Johannes Erdfelt wrote:
> 
> On Mon, Jul 01, 2002, Clemens Ladisch <[EMAIL PROTECTED]> wrote:
> > 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.
> 
> Are you sure the TD didn't complete?

Yes. The device (USB MIDI, Roland SC-8820) won't send any data unless
explicitly prompted to do so.

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

No, I deduced this from the error pattern: only the first packet to be
received won't show up, all following packets are received successfully.
This only happens when I execute the submit/unlink sequence once, or an
odd number of times. After an even number of times, everything is well.

When I add a printk() after the call to uhci_fill_td in the loop in
uhci.c's uhci_submit_bulk(), and execute the following code:

        for (i = 0; i < 3; ++i) {
                urb->dev = dev;
                usb_submit_urb(urb);
                printk(KERN_DEBUG "after submit: toggle = %d\n",
                       usb_gettoggle(dev, ep, 0));
                usb_unlink_urb(urb);
                printk(KERN_DEBUG "after unlink: toggle = %d\n",
                       usb_gettoggle(dev, ep, 0));
        }

... I get:

Jul  3 10:58:20 aquila kernel: new TD, toggle = 0
Jul  3 10:58:20 aquila kernel: after submit: toggle = 1
Jul  3 10:58:20 aquila kernel: complete, status = -2
Jul  3 10:58:20 aquila kernel: after unlink: toggle = 1
Jul  3 10:58:20 aquila kernel: new TD, toggle = 1
Jul  3 10:58:20 aquila kernel: after submit: toggle = 0
Jul  3 10:58:20 aquila kernel: complete, status = -2
Jul  3 10:58:20 aquila kernel: after unlink: toggle = 0
Jul  3 10:58:20 aquila kernel: new TD, toggle = 0
Jul  3 10:58:20 aquila kernel: after submit: toggle = 1
Jul  3 10:58:20 aquila kernel: complete, status = -2
Jul  3 10:58:20 aquila kernel: after unlink: toggle = 1
(-2 = USB_ST_URB_KILLED)

With usb-uhci, I get similar output.

> uhci.c explicitly checks for that situation.

Oops, now I see that uhci_unlink_generic() has changed in 2.4.19-rc1.
I'll have to test that.

I did not yet try the code, but shouldn't prevactive be initialized to 0?


Clemens


-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
No, I will not fix your computer.
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