On Fri, Apr 15, 2022 at 12:02:14PM +0100, Russell King (Oracle) wrote: > On Fri, Apr 15, 2022 at 01:55:03PM +0300, Vladimir Oltean wrote: > > I meant that for a DSA switch driver is mandatory to call dsa_switch_shutdown() > > from your ->shutdown method, otherwise subtle things break, sorry for being unclear. > > > > Please blindly copy-paste the odd pattern that all other DSA drivers use > > in ->shutdown and ->remove (with the platform_set_drvdata(dev, NULL) calls), > > like a normal person :) > > Those platform_set_drvdata(, NULL) calls should be killed - the > driver model will set the driver data to NULL after ->remove has > been called - so having drivers also setting the driver data to > NULL is mere duplication. I can see why you say that, but the reverse is not true. A driver can be removed from a device after said device has been shut down, and DSA does things in dsa_unregister_switch() and in dsa_switch_shutdown() that are incompatible with each other, so either one or the other should be called, but not both. The platform_set_drvdata(dev, NULL) from the ->remove path may be redundant for the reason you mentioned, but it doesn't really hurt anything, really (it's a pointer assignment), and perhaps would lead to even more confusion (why are we setting the drvdata to NULL from ->shutdown but not also from ->remove?). > The only case it would matter is if someone is looking up the device > and then accessing the driver data - and one would hope that's done > with appropriate locking or other guarantees (e.g. driver can never > be unbound once the driver data has been set.) No, this isn't what is happening.