On Mon, Mar 22, 2021 at 12:37:07PM +0000, Mark Brown wrote: > On Sun, Mar 21, 2021 at 06:43:32PM -0700, Dmitry Torokhov wrote: > > > Note that this is not SPI-specific issue. I already send a similar > > patch for I2C and will be sending more. > > This feels like it might make sense to push up to the driver core level > then rather than doing in individual buses?
That is exactly the issue: we can't. Driver core already releases all resources when a device is being unbound but that happens after bus "remove" code is executed and therefore is too late. The device might already be powered down, but various devm release() callbacks will be trying to access it. devm only works when you do not mix manual resources with managed ones, and when bus code allocates resources themselves (attaching a device to a power domain can be viewed as resource acquisition) we violate this principle. We could, of course, to make SPI bus' probe() use devm_add_action_or_reset() to work in removal of the device from the power domain into the stream of devm resources, but that still requires changes at bus code, and I believe will complicate matters if we need to extend SPI bus code to allocate more resources in probe(). So I opted for opening a devm group to separate resources allocated before and after probe() to be able to release them in the right order. Thanks. -- Dmitry