diff options
Diffstat (limited to 'drivers/base/dd.c')
-rw-r--r-- | drivers/base/dd.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/base/dd.c b/drivers/base/dd.c index 392e2b462560..fc27fab62f50 100644 --- a/drivers/base/dd.c +++ b/drivers/base/dd.c @@ -816,6 +816,8 @@ static void __device_release_driver(struct device *dev, struct device *parent) drv = dev->driver; if (drv) { + pm_runtime_get_sync(dev); + while (device_links_busy(dev)) { device_unlock(dev); if (parent) @@ -831,11 +833,12 @@ static void __device_release_driver(struct device *dev, struct device *parent) * have released the driver successfully while this one * was waiting, so check for that. */ - if (dev->driver != drv) + if (dev->driver != drv) { + pm_runtime_put(dev); return; + } } - pm_runtime_get_sync(dev); pm_runtime_clean_up_links(dev); driver_sysfs_remove(dev); |