Re: [PATCH tip/locking/core] compiler-context-analysis: Support immediate acquisition after initialization
From: Marco Elver
Date: Fri Jan 16 2026 - 10:38:04 EST
On Fri, Jan 16, 2026 at 04:27PM +0100, Christoph Hellwig wrote:
> On Fri, Jan 16, 2026 at 04:20:16PM +0100, Peter Zijlstra wrote:
> > is *much* clearer than something like:
> >
> > spinlock_init(&obj->lock);
> > // init
> > spinlock_deinit(&obj->lock);
> >
> > Exactly because it has explicit scope. (also my deinit naming might not
> > be optimal, it is ambiguous at best, probably confusing).
>
> WTF is spinlock_deinit even supposed to be?
>
> I though this is about:
>
> spin_lock_init(&obj->lock);
> spin_lock(&obj->lock);
>
> > Not to mention that the scope things are far more robust vs error paths.
>
> They are just a really hacked up clumsy way to provide what a very
> limited version of what the capability analys provides, while messing
> up the code.
There might be more design options we're missing, but thus far I think
it's this patch (using the "reentrant promotion" approach) vs. scoped
init guards.
* Scoped init guards [1]: Sound, requires explicit
guard(type_init) (or scoped_guard) for guarded member
initialization.
* Reentrant init (this patch): Less intrusive, foo_init() just
works. Misses double-locks immediately after init.
[1] https://git.kernel.org/pub/scm/linux/kernel/git/melver/linux.git/log/?h=ctx-analysis/init-guards
FWIW, on the C++ side, Clang's Thread Safety Analysis just completely
disables itself in constructors to allow guarded member init. So we're
already doing better than that. :-)
As for why this simpler patch, I stand by my points from [2]; trading
false positives against false negatives so that things "just work" does
have merit, too.
[2] https://lore.kernel.org/all/CANpmjNPm5861mmHYMHoC9ErRfbLxmTy=MYwfsGC-YTpgP+z-Bw@xxxxxxxxxxxxxx/
I'm more or less indifferent, though would slightly favor the simpler
patch (this one), but can live with either. I can send out [1] for
reference, and you can choose.
Thanks,
-- Marco