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 mailing list