As a rule, devm_spi_register_controller() must not be used if the driver's ->remove() hook performs teardown steps which shall be performed after unbinding of slaves. Dozens of drivers are doing it wrong. Document this gotcha to hopefully prevent further misuse. Signed-off-by: Lukas Wunner <lukas@xxxxxxxxx> --- drivers/spi/spi.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c index d32bdc6cbf66..e1a35aa7eeb8 100644 --- a/drivers/spi/spi.c +++ b/drivers/spi/spi.c @@ -2714,6 +2714,13 @@ static void devm_spi_unregister(struct device *dev, void *res) * Register a SPI device as with spi_register_controller() which will * automatically be unregistered and freed. * + * Be aware that a managed SPI controller and the attached slaves are + * unregistered after the driver's ->remove() callback has been executed. + * So the SPI slaves may still access the bus during and after ->remove(). + * Thus, devm_spi_register_controller() may only be used if there is no + * ->remove() callback at all or if it does not perform teardown steps + * which render the bus inaccessible. + * * Return: zero on success, else a negative error code. */ int devm_spi_register_controller(struct device *dev, -- 2.26.2