On Fri, Oct 2, 2020 at 1:41 AM Jason Gunthorpe <jgg@xxxxxxxx> wrote: > On Thu, Oct 01, 2020 at 10:16:35PM +0200, Jann Horn wrote: > > > A subclass isn't right, it has to be a _nested annotation. > > > > > > nested locking is a pretty good reason to not be able to do this, this > > > is something lockdep does struggle to model. > > > > Did I get the terminology wrong? I thought they were the same. The > > down_*_nested() APIs take an argument "subclass", with the default > > subclass for the functions without "_nested" being 0. > > AFAIK a subclass at init time sticks with the lock forever, the > _nested ones are temporary overrides. > > I think what you kind of want is to start out with > lockdep_set_novalidate_class() then switch to a real class once things > are finished. Not sure exactly how :) Huh, is there an API that sets a *subclass* (not a class) at init time? I don't think there is. Anyway, I'm pretty sure I just need to use the normal _nested() locking API. I'm still cleaning up and testing a little bit, but I'll send it out in a short while, unless I run into unexpected trouble. Let's continue this if necessary once there's a concrete patch to talk about. :)