[PATCH] USB: Eliminate wait following interface unregistration

From: Greg KH
Date: Sun Mar 28 2004 - 02:15:46 EST


The following patch from Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> fixes a
bug in the current USB code that causes khubd to hang when a device is
removed from the system, thereby preventing any future USB device
changes (like adding or removing other devices) from happening.

Both Andrew and I can easily duplicate this bug against the current -bk

It's not a perfect fix, but it works for now, and I will spend the next
week working on restructuring the code so this is handled properly.


greg k-h

--- 1.73/drivers/usb/core/message.c Wed Mar 17 14:16:47 2004
+++ edited/drivers/usb/core/message.c Wed Mar 24 10:17:04 2004
@@ -794,9 +794,6 @@

static void release_interface(struct device *dev)
- struct usb_interface *interface = to_usb_interface(dev);
- complete(interface->released);

@@ -828,16 +825,12 @@
if (dev->actconfig) {
for (i = 0; i < dev->actconfig->desc.bNumInterfaces; i++) {
struct usb_interface *interface;
- struct completion intf_completion;

/* remove this interface */
interface = dev->actconfig->interface[i];
dev_dbg (&dev->dev, "unregistering interface %s\n",
- init_completion (&intf_completion);
- interface->released = &intf_completion;
device_unregister (&interface->dev);
- wait_for_completion (&intf_completion);
dev->actconfig = 0;
if (dev->state == USB_STATE_CONFIGURED)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/