aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation/usb/URB.txt
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation/usb/URB.txt')
-rw-r--r--Documentation/usb/URB.txt21
1 files changed, 10 insertions, 11 deletions
diff --git a/Documentation/usb/URB.txt b/Documentation/usb/URB.txt
index 00d2c644068e..50da0d455444 100644
--- a/Documentation/usb/URB.txt
+++ b/Documentation/usb/URB.txt
@@ -195,13 +195,12 @@ by the completion handler.
195 195
196The handler is of the following type: 196The handler is of the following type:
197 197
198 typedef void (*usb_complete_t)(struct urb *, struct pt_regs *) 198 typedef void (*usb_complete_t)(struct urb *)
199 199
200I.e., it gets the URB that caused the completion call, plus the 200I.e., it gets the URB that caused the completion call. In the completion
201register values at the time of the corresponding interrupt (if any). 201handler, you should have a look at urb->status to detect any USB errors.
202In the completion handler, you should have a look at urb->status to 202Since the context parameter is included in the URB, you can pass
203detect any USB errors. Since the context parameter is included in the URB, 203information to the completion handler.
204you can pass information to the completion handler.
205 204
206Note that even when an error (or unlink) is reported, data may have been 205Note that even when an error (or unlink) is reported, data may have been
207transferred. That's because USB transfers are packetized; it might take 206transferred. That's because USB transfers are packetized; it might take
@@ -210,12 +209,12 @@ have transferred successfully before the completion was called.
210 209
211 210
212NOTE: ***** WARNING ***** 211NOTE: ***** WARNING *****
213NEVER SLEEP IN A COMPLETION HANDLER. These are normally called 212NEVER SLEEP IN A COMPLETION HANDLER. These are often called in atomic
214during hardware interrupt processing. If you can, defer substantial 213context.
215work to a tasklet (bottom half) to keep system latencies low. You'll
216probably need to use spinlocks to protect data structures you manipulate
217in completion handlers.
218 214
215In the current kernel, completion handlers run with local interrupts
216disabled, but in the future this will be changed, so don't assume that
217local IRQs are always disabled inside completion handlers.
219 218
2201.8. How to do isochronous (ISO) transfers? 2191.8. How to do isochronous (ISO) transfers?
221 220