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,