Skip to content

Commit

Permalink
driver core: Move async_synchronize_full call
Browse files Browse the repository at this point in the history
Move the async_synchronize_full call out of __device_release_driver and
into driver_detach.

The idea behind this is that the async_synchronize_full call will only
guarantee that any existing async operations are flushed. This doesn't do
anything to guarantee that a hotplug event that may occur while we are
doing the release of the driver will not be asynchronously scheduled.

By moving this into the driver_detach path we can avoid potential deadlocks
as we aren't holding the device lock at this point and we should not have
the driver we want to flush loaded so the flush will take care of any
asynchronous events the driver we are detaching might have scheduled.

Fixes: 765230b ("driver-core: add asynchronous probing support for drivers")
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Signed-off-by: Alexander Duyck <alexander.h.duyck@linux.intel.com>
Reviewed-by: Luis Chamberlain <mcgrof@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Alexander Duyck authored and Greg Kroah-Hartman committed Dec 6, 2018
1 parent 99fef58 commit c37d721
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions drivers/base/dd.c
Original file line number Diff line number Diff line change
Expand Up @@ -931,9 +931,6 @@ static void __device_release_driver(struct device *dev, struct device *parent)

drv = dev->driver;
if (drv) {
if (driver_allows_async_probing(drv))
async_synchronize_full();

while (device_links_busy(dev)) {
device_unlock(dev);
if (parent)
Expand Down Expand Up @@ -1039,6 +1036,9 @@ void driver_detach(struct device_driver *drv)
struct device_private *dev_prv;
struct device *dev;

if (driver_allows_async_probing(drv))
async_synchronize_full();

for (;;) {
spin_lock(&drv->p->klist_devices.k_lock);
if (list_empty(&drv->p->klist_devices.k_list)) {
Expand Down

0 comments on commit c37d721

Please sign in to comment.