Re: [driver-core PATCH v4 4/6] driver core: Probe devices asynchronously instead of the driver

From: Bart Van Assche
Date: Thu Oct 18 2018 - 22:31:18 EST

On 10/18/18 7:20 PM, Alexander Duyck wrote:
I see what you are talking about now. Actually I think this was an
existing issue before my patch even came into play. Basically the code
as it currently stands is device specific in terms of the attach and
release code.

I wonder if we shouldn't have the async_synchronize_full call in
__device_release_driver moved down and into driver_detach before we
even start the for loop. Assuming the driver is no longer associated
with the bus that should flush out all devices so that we can then
pull them out of the devices list at least. I may look at adding an
additional bitflag to the device struct to indicate that it has a
driver attach pending. Then for things like races between any attach
and detach calls the logic becomes pretty straight forward. Attach
will set the bit and provide driver data, detach will clear the bit
and the driver data. If a driver loads in between it should clear the
bit as well.

I'll work on it over the next couple days and hopefully have something
ready for testing/review early next week.

Hi Alex,

How about checking in __driver_attach_async_helper() whether the driver pointer is still valid by checking whether bus_for_each_drv(dev->bus, ...) can still find the driver pointer? That approach requires protection with a mutex to avoid races with the driver detach code but shouldn't require any new flags in struct device.