diff options
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/core/urb.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/usb/core/urb.c b/drivers/usb/core/urb.c index dc838f81742c..16972159a57a 100644 --- a/drivers/usb/core/urb.c +++ b/drivers/usb/core/urb.c | |||
@@ -420,12 +420,16 @@ int usb_submit_urb(struct urb *urb, int mem_flags) | |||
420 | * | 420 | * |
421 | * Host Controller Drivers (HCDs) place all the URBs for a particular | 421 | * Host Controller Drivers (HCDs) place all the URBs for a particular |
422 | * endpoint in a queue. Normally the queue advances as the controller | 422 | * endpoint in a queue. Normally the queue advances as the controller |
423 | * hardware processes each request. But when an URB terminates with any | 423 | * hardware processes each request. But when an URB terminates with an |
424 | * fault (such as an error, or being unlinked) its queue stops, at least | 424 | * error its queue stops, at least until that URB's completion routine |
425 | * until that URB's completion routine returns. It is guaranteed that | 425 | * returns. It is guaranteed that the queue will not restart until all |
426 | * the queue will not restart until all its unlinked URBs have been fully | 426 | * its unlinked URBs have been fully retired, with their completion |
427 | * retired, with their completion routines run, even if that's not until | 427 | * routines run, even if that's not until some time after the original |
428 | * some time after the original completion handler returns. | 428 | * completion handler returns. Normally the same behavior and guarantees |
429 | * apply when an URB terminates because it was unlinked; however if an | ||
430 | * URB is unlinked before the hardware has started to execute it, then | ||
431 | * its queue is not guaranteed to stop until all the preceding URBs have | ||
432 | * completed. | ||
429 | * | 433 | * |
430 | * This means that USB device drivers can safely build deep queues for | 434 | * This means that USB device drivers can safely build deep queues for |
431 | * large or complex transfers, and clean them up reliably after any sort | 435 | * large or complex transfers, and clean them up reliably after any sort |