On Fri, Apr 15, 2022 at 12:23:30PM +0100, Russell King (Oracle) wrote: > If ->shutdown has been called, the system is going down, and userspace > is probably already dead. There isn't anything preventing ->remove from being called after ->shutdown has been called. It all starts with the pattern that some driver authors prefer, which is to redirect their ->shutdown method to ->remove. They argue that it provides for a well-tested common path, so in turn, this pattern is quite widespread and I'm not one to argue for removing it. When such driver (redirecting ->shutdown to ->remove) is a bus driver (SPI, I2C, lately even the fsl-mc bus), the implication is that the controller will be unregistered on shutdown. To unregister a bus, you need to unregister all devices on the bus too. Due to implicit device ordering on the dpm_list, the ->shutdown() method of children on said bus has already executed, now we're in the context of the ->shutdown() procedure of the bus driver itself. You can argue "hey, that's SPI/I2C and this is a platform driver, there isn't any bus that unregisters on shutdown here", and you may have a point there. But platform devices aren't just memory-mapped devices, they can also be children of mfd devices on SPI/I2C buses. So in theory you can see this pattern happen on platform devices as well. This is the reason why I insist for uniformity in the DSA layer in the way that shutdown is handled. People copy and paste code a lot, and by leaving them with less variance in the code that they copy, subtle differences that are not understood but do matter are less likely to creep in.