Hi,
I'm cleaning up my IrDA todo list, and I've got a question
about usb-uhci and URBs that is probably best asked here. I'm not on
the list, so please cc me ;-)
Hardware :
SMP dual PPro 150, generic USB card, two IrDA USB dongles
What's happening :
Sometimes, after a while (few hours), the whole USB system
seems to fail over and usb-uhci refuse to accept URBs for
transmission.
In details :
The transmit routine looks like this :
------------------------------------
FILL_BULK_URB(purb, ...);
purb->transfer_flags = USB_QUEUE_BULK | USB_ZERO_PACKET;
purb->timeout = MSECS_TO_JIFFIES(100);
usb_submit_urb(purb)
------------------------------------
After 110 ms (which is more than the URB timeout), the network
watchdog kicks in. First thing I do is to check the state of the
URB. It's status is always -115 == -EINPROGRESS == USB_ST_URB_PENDING.
In that case, I call usb_unlink_urb(purb); to cancel the
operation. The URB completion handler is called immediately with
purb->status == -2 == -NOENT (which is consistent with the code in
usb-uhci).
After another 110 ms (i.e. next network watchdog), I clean up
the URB and call the transmit routine again (see above). Same deal, at
the next watchdog the URB is -115.
Note that in this case the completion handler is only called
on usb_unlink_urb(purb);, whereas normally I see it called on URB
timeout.
Note also that both IrDA dongles are usually failing
together. It's hard to say if they always fail at the same time,
because usually I discover it the next morning and I'm burried in
logs. Last time, they failed while the system was idle and the second
dongle failed 1s after the first one. Driver wise, the two dongle
instances are totally separated, so I guess something goes wrong in
the USB layer.
It might be related to memory (or vice versa). This box seems
to leak memory (and it doesn't go in slabinfo, cache, buffer or
processes, just gone - weird - I've go only 0.5MB in size-32(DMA) that
is suspicious).
Lastly, if after such event I do :
rmmod usb-uhci
The box just lock hard. Hard reset needed.
Questions :
Why the completion handler is not called on timeout in this case ?
Why transfer always fail ?
Why usb-uhci lock the box on removal ?
What's going on ?
Thanks very much for your answers...
Jean
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel