aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2011-04-28 10:45:24 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2011-04-29 17:24:29 -0700
commit6498d9db6d2dad4cf5deb2dd09e0816904f41ca5 (patch)
tree68ebcb03c7d9fc1caf9205d96943ce46d0a08c4c
parent15b2f3204a5c878c32939094775fb7349f707263 (diff)
downloadkernel_samsung_smdk4412-6498d9db6d2dad4cf5deb2dd09e0816904f41ca5.tar.gz
kernel_samsung_smdk4412-6498d9db6d2dad4cf5deb2dd09e0816904f41ca5.tar.bz2
kernel_samsung_smdk4412-6498d9db6d2dad4cf5deb2dd09e0816904f41ca5.zip
USB: documentation update for the pre_reset method
This patch (as1459) updates the documentation for the pre_reset method in struct usb_driver. When a driver is notified of an impending reset, it must cancel all outstanding I/O and not start any new I/O until it has been notified that the reset is complete. As far as I know, most existing drivers that implement pre_reset do this now. The major exceptions appear to be the SpeedTouch and CDC-WDM drivers. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--Documentation/usb/callbacks.txt8
-rw-r--r--include/linux/usb.h6
2 files changed, 9 insertions, 5 deletions
diff --git a/Documentation/usb/callbacks.txt b/Documentation/usb/callbacks.txt
index bfb36b34b79..9e85846bdb9 100644
--- a/Documentation/usb/callbacks.txt
+++ b/Documentation/usb/callbacks.txt
@@ -95,9 +95,11 @@ pre_reset
int (*pre_reset)(struct usb_interface *intf);
-Another driver or user space is triggering a reset on the device which
-contains the interface passed as an argument. Cease IO and save any
-device state you need to restore.
+A driver or user space is triggering a reset on the device which
+contains the interface passed as an argument. Cease IO, wait for all
+outstanding URBs to complete, and save any device state you need to
+restore. No more URBs may be submitted until the post_reset method
+is called.
If you need to allocate memory here, use GFP_NOIO or GFP_ATOMIC, if you
are in atomic context.
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 65f78ca5d88..73c7df48960 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -806,8 +806,10 @@ struct usbdrv_wrap {
* @resume: Called when the device is being resumed by the system.
* @reset_resume: Called when the suspended device has been reset instead
* of being resumed.
- * @pre_reset: Called by usb_reset_device() when the device
- * is about to be reset.
+ * @pre_reset: Called by usb_reset_device() when the device is about to be
+ * reset. This routine must not return until the driver has no active
+ * URBs for the device, and no more URBs may be submitted until the
+ * post_reset method is called.
* @post_reset: Called by usb_reset_device() after the device
* has been reset
* @id_table: USB drivers use ID table to support hotplugging.