ChangeSet 1.823.3.9, 2002/11/11 15:47:33-08:00, david-b@pacbell.net

[PATCH] USB: update usb hotplug documentation



diff -Nru a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
--- a/drivers/usb/core/usb.c	Thu Nov 14 14:12:43 2002
+++ b/drivers/usb/core/usb.c	Thu Nov 14 14:12:43 2002
@@ -514,17 +514,10 @@
  * or other modules, configure the device, and more.  Drivers can provide
  * a MODULE_DEVICE_TABLE to help with module loading subtasks.
  *
- * Some synchronization is important: removes can't start processing
- * before the add-device processing completes, and vice versa.  That keeps
- * a stack of USB-related identifiers stable while they're in use.  If we
- * know that agents won't complete after they return (such as by forking
- * a process that completes later), it's enough to just waitpid() for the
- * agent -- as is currently done.
- *
- * The reason: we know we're called either from khubd (the typical case)
- * or from root hub initialization (init, kapmd, modprobe, etc).  In both
- * cases, we know no other thread can recycle our address, since we must
- * already have been serialized enough to prevent that.
+ * We're called either from khubd (the typical case) or from root hub
+ * (init, kapmd, modprobe, rmmod, etc), but the agents need to handle
+ * delays in event delivery.  Use sysfs (and DEVPATH) to make sure the
+ * device (and this configuration!) are still present.
  */
 static int usb_hotplug (struct device *dev, char **envp, int num_envp,
 			char *buffer, int buffer_size)
@@ -579,7 +572,7 @@
 	scratch += length;
 #endif
 
-	/* per-device configuration hacks are common */
+	/* per-device configurations are common */
 	envp [i++] = scratch;
 	length += snprintf (scratch, buffer_size - length, "PRODUCT=%x/%x/%x",
 			    usb_dev->descriptor.idVendor,
@@ -604,10 +597,9 @@
 	if (usb_dev->descriptor.bDeviceClass == 0) {
 		int alt = intf->act_altsetting;
 
-		/* a simple/common case: one config, one interface, one driver
-		 * with current altsetting being a reasonable setting.
-		 * everything needs a smart agent and usbfs; or can rely on
-		 * device-specific binding policies.
+		/* 2.4 only exposed interface zero.  in 2.5, hotplug
+		 * agents are called for all interfaces, and can use
+		 * $DEVPATH/bInterfaceNumber if necessary.
 		 */
 		envp [i++] = scratch;
 		length += snprintf (scratch, buffer_size - length,
