On Thu, Nov 20, 2025 at 04:09:33PM +0100, Marco Elver wrote:
> To avoid warnings in constructors, the initialization functions mark a
> lock as acquired when initialized before guarded variables.
> diff --git a/include/linux/rwlock.h b/include/linux/rwlock.h
> index 5b87c6f4a243..a2f85a0356c4 100644
> --- a/include/linux/rwlock.h
> +++ b/include/linux/rwlock.h
> @@ -22,23 +22,24 @@ do {
> \
> static struct lock_class_key __key; \
> \
> __rwlock_init((lock), #lock, &__key); \
> + __assume_ctx_guard(lock); \
> } while (0)
> #else
> # define rwlock_init(lock) \
> - do { *(lock) = __RW_LOCK_UNLOCKED(lock); } while (0)
> + do { *(lock) = __RW_LOCK_UNLOCKED(lock); __assume_ctx_guard(lock); }
> while (0)
> #endif
This is again somewhat magical and confused the living daylight out of
me. I know (from having looked back on previous discussions) that I was
confused about this before, and clearly it didn't stick.
So obviously I'll be confused again when I look at this code in a years
time or so :/
Can we get a comment near this __assume_ctx_guard() thing (because
putting it all over the lock initializers would probably be duplicating
things too much)?