diff options
Diffstat (limited to 'drivers/base/driver.c')
| -rw-r--r-- | drivers/base/driver.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c index 1214cbd17d86..082bfded3854 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c | |||
| @@ -183,7 +183,14 @@ int driver_register(struct device_driver * drv) | |||
| 183 | void driver_unregister(struct device_driver * drv) | 183 | void driver_unregister(struct device_driver * drv) |
| 184 | { | 184 | { |
| 185 | bus_remove_driver(drv); | 185 | bus_remove_driver(drv); |
| 186 | wait_for_completion(&drv->unloaded); | 186 | /* |
| 187 | * If the driver is a module, we are probably in | ||
| 188 | * the module unload path, and we want to wait | ||
| 189 | * for everything to unload before we can actually | ||
| 190 | * finish the unload. | ||
| 191 | */ | ||
| 192 | if (drv->owner) | ||
| 193 | wait_for_completion(&drv->unloaded); | ||
| 187 | } | 194 | } |
| 188 | 195 | ||
| 189 | /** | 196 | /** |
