Re: [PATCH RFC] drivers/core: Replace lockdep_set_novalidate_class() with unique class keys

From: Kent Overstreet
Date: Sat Feb 11 2023 - 22:10:36 EST


On Sat, Feb 11, 2023 at 10:03:11PM -0500, Alan Stern wrote:
> On Sat, Feb 11, 2023 at 09:46:42PM -0500, Kent Overstreet wrote:
> > On Sat, Feb 11, 2023 at 09:40:58PM -0500, Alan Stern wrote:
> > > Or maybe you're referring to what this patch does? It does indeed
> > > create a bunch of dynamic classes -- one for each struct device. The
> > > ordering rules derived by lockdep will be somewhat arbitrary, as you
> > > say. But some of them certainly will be related to the structure of the
> > > source code.
> >
> > I could be :) I haven't been able to find the patch in question - have a
> > link?
>
> It was earlier in this email thread. Here's a link:
>
> https://lore.kernel.org/r/Y+gLd78vChQERZ6A@xxxxxxxxxxxxxxxxxxx/
>
> > If you're talking about making lock_class_key dynamic, I think I stand
> > by what I said though - OTOH, if all you're doing is lifting that to the
> > caller of the device object init function, so it'll still be a static
> > object in the driver, that would be totally fine.
>
> The patch does the first, not the second. Feel free to object some
> more... :-)

So IMO the more correct way to do this would be to change
device_initialize() to __device_initialize(), have it take a
lock_class_key as a parameter, and then use __mutex_init() instead of
mutex_init().

But let's think about this more. Will there ever be situations where
lock ordering is dependent on what hardware is plugged into what, or
what hardware is plugged in first?