speedtch usbatm.c,1.20,1.21 usbatm.h,1.13,1.14
Duncan Sands
baldrick at free.fr
Tue Apr 26 17:50:45 EDT 2005
Hi Roman,
if (unlikely(urb->status)) {
/* throttle processing in case of an error */
mod_timer(&channel->delay, jiffies + msecs_to_jiffies(THROTTLE_MSECS));
if (urb->status == -EPIPE) /* this one may be cleaned up at times */
schedule_work(&channel->clear_halt_work);
}
>From the doc for usb_clear_halt:
* This is used to clear halt conditions for bulk and interrupt endpoints,
* as reported by URB completion status. Endpoints that are halted are
* sometimes referred to as being "stalled". Such endpoints are unable
* to transmit or receive data until the halt status is cleared. Any URBs
* queued for such an endpoint should normally be unlinked by the driver
* before clearing the halt condition, as described in sections 5.7.5
* and 5.8.5 of the USB 2.0 spec.
However it looks like you don't unlink the other urbs, and even the
current urb can be rescheduled if the usb_clear_halt takes more than
THROTTLE_MSECS (5 milliseconds). It's not clear exactly what's meant
by endpoint here - for the speedtch tx and rx are on the same endpoint,
except that the in endpoint has the in bit set; does that count as the
same endpoint? If so, something needs to be done about urbs in both
directions.
Ciao,
Duncan.
More information about the Usbatm-commits
mailing list