|
@@ -149,10 +149,6 @@ void put_driver(struct device_driver * drv)
|
|
|
* We pass off most of the work to the bus_add_driver() call,
|
|
|
* since most of the things we have to do deal with the bus
|
|
|
* structures.
|
|
|
- *
|
|
|
- * The one interesting aspect is that we setup @drv->unloaded
|
|
|
- * as a completion that gets complete when the driver reference
|
|
|
- * count reaches 0.
|
|
|
*/
|
|
|
int driver_register(struct device_driver * drv)
|
|
|
{
|
|
@@ -162,35 +158,19 @@ int driver_register(struct device_driver * drv)
|
|
|
printk(KERN_WARNING "Driver '%s' needs updating - please use bus_type methods\n", drv->name);
|
|
|
}
|
|
|
klist_init(&drv->klist_devices, NULL, NULL);
|
|
|
- init_completion(&drv->unloaded);
|
|
|
return bus_add_driver(drv);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* driver_unregister - remove driver from system.
|
|
|
* @drv: driver.
|
|
|
*
|
|
|
* Again, we pass off most of the work to the bus-level call.
|
|
|
- *
|
|
|
- * Though, once that is done, we wait until @drv->unloaded is completed.
|
|
|
- * This will block until the driver refcount reaches 0, and it is
|
|
|
- * released. Only modular drivers will call this function, and we
|
|
|
- * have to guarantee that it won't complete, letting the driver
|
|
|
- * unload until all references are gone.
|
|
|
*/
|
|
|
|
|
|
void driver_unregister(struct device_driver * drv)
|
|
|
{
|
|
|
bus_remove_driver(drv);
|
|
|
- /*
|
|
|
- * If the driver is a module, we are probably in
|
|
|
- * the module unload path, and we want to wait
|
|
|
- * for everything to unload before we can actually
|
|
|
- * finish the unload.
|
|
|
- */
|
|
|
- if (drv->owner)
|
|
|
- wait_for_completion(&drv->unloaded);
|
|
|
}
|
|
|
|
|
|
/**
|