===== 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)