diff options
author | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2011-06-16 13:06:04 -0700 |
---|---|---|
committer | Sarah Sharp <sarah.a.sharp@linux.intel.com> | 2011-06-17 11:28:21 -0700 |
commit | a9e758634f464ffb09344821a9f0b5a5c6df2b3e (patch) | |
tree | 5fe6502609769a90e77a7b9b91e2e2e691235572 /Documentation/usb | |
parent | b3df3f9c7df9a8d85e03e158d35487618a160901 (diff) | |
download | kernel_samsung_smdk4412-a9e758634f464ffb09344821a9f0b5a5c6df2b3e.tar.gz kernel_samsung_smdk4412-a9e758634f464ffb09344821a9f0b5a5c6df2b3e.tar.bz2 kernel_samsung_smdk4412-a9e758634f464ffb09344821a9f0b5a5c6df2b3e.zip |
USB: Fix up URB error codes to reflect implementation.
Documentation/usb/error-codes.txt mentions that urb->status can be set to
-EXDEV, if the isochronous transfer was not fully completed. However, in
practice, EHCI, UHCI, and OHCI all only set -EXDEV in the individual frame
status, never in the URB status. Those host controller actually always
pass in a zero status to usb_hcd_giveback_urb, and rely on the core to set
the appropriate status value.
The xHCI driver ran into issues with the uvcvideo driver when it tried to
set -EXDEV in urb->status, because the driver refused to submit URBs, and
the userspace camera application's video froze.
Clean up the documentation to reflect the actual implementation.
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Diffstat (limited to 'Documentation/usb')
-rw-r--r-- | Documentation/usb/error-codes.txt | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Documentation/usb/error-codes.txt b/Documentation/usb/error-codes.txt index d83703ea74b..b3f606b81a0 100644 --- a/Documentation/usb/error-codes.txt +++ b/Documentation/usb/error-codes.txt @@ -76,6 +76,13 @@ A transfer's actual_length may be positive even when an error has been reported. That's because transfers often involve several packets, so that one or more packets could finish before an error stops further endpoint I/O. +For isochronous URBs, the urb status value is non-zero only if the URB is +unlinked, the device is removed, the host controller is disabled, or the total +transferred length is less than the requested length and the URB_SHORT_NOT_OK +flag is set. Completion handlers for isochronous URBs should only see +urb->status set to zero, -ENOENT, -ECONNRESET, -ESHUTDOWN, or -EREMOTEIO. +Individual frame descriptor status fields may report more status codes. + 0 Transfer completed successfully @@ -132,7 +139,7 @@ one or more packets could finish before an error stops further endpoint I/O. device removal events immediately. -EXDEV ISO transfer only partially completed - look at individual frame status for details + (only set in iso_frame_desc[n].status, not urb->status) -EINVAL ISO madness, if this happens: Log off and go home |