Re: [linux-usb-devel] Re: [OOPS, usbcore, releaseintf] 2.6.0-test10-mm1

From: Greg KH
Date: Wed Dec 10 2003 - 16:11:18 EST


On Wed, Dec 10, 2003 at 12:46:21PM -0800, Greg KH wrote:
> > Of course, if all you want to do is unload the module then it doesn't
> > matter which host is which. You just have to wait until they are all
> > gone.
>
> Exactly, and that will happen, if we wait on that
> class_device_unregister() call. An example of how to do that can be
> seen in the i2c_del_adapter() function in drivers/i2c/i2c-core.c.

Ok, below is the patch. I've only compile tested it, not run it yet.
Please let me know if it works for you or not.

thanks,

greg k-h


===== hcd.c 1.123 vs edited =====
--- 1.123/drivers/usb/core/hcd.c Sun Dec 7 04:29:05 2003
+++ edited/hcd.c Wed Dec 10 13:06:19 2003
@@ -588,6 +588,9 @@

if (bus->release)
bus->release(bus);
+ /* FIXME change this when the driver core gets the
+ * class_device_unregister_wait() call */
+ complete(&bus->released);
}

static struct class usb_host_class = {
@@ -724,7 +727,11 @@

clear_bit (bus->busnum, busmap.busmap);

+ /* FIXME change this when the driver core gets the
+ * class_device_unregister_wait() call */
+ init_completion(&bus->released);
class_device_unregister(&bus->class_dev);
+ wait_for_completion(&bus->released);
}
EXPORT_SYMBOL (usb_deregister_bus);

===== usb.h 1.164 vs edited =====
--- 1.164/include/linux/usb.h Mon Oct 6 10:46:13 2003
+++ edited/usb.h Wed Dec 10 13:07:27 2003
@@ -210,6 +210,8 @@

struct class_device class_dev; /* class device for this bus */
void (*release)(struct usb_bus *bus); /* function to destroy this bus's memory */
+ /* FIXME, remove this when the driver core gets class_device_unregister_wait */
+ struct completion released;
};
#define to_usb_bus(d) container_of(d, struct usb_bus, class_dev)

-
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/