[PATCH v5 20/36] locking/ww_mutex: Support Clang's context analysis
Bart Van Assche
bvanassche at acm.org
Fri Jan 9 20:16:33 UTC 2026
On 12/19/25 8:40 AM, Marco Elver wrote:
> Add support for Clang's context analysis for ww_mutex.
>
> The programming model for ww_mutex is subtly more complex than other
> locking primitives when using ww_acquire_ctx. Encoding the respective
> pre-conditions for ww_mutex lock/unlock based on ww_acquire_ctx state
> using Clang's context analysis makes incorrect use of the API harder.
That's a very short description. It should have been explained in the
patch description how the ww_acquire_ctx changes affect callers of the
ww_acquire_{init,done,fini}() functions.
> static inline void ww_acquire_init(struct ww_acquire_ctx *ctx,
> struct ww_class *ww_class)
> + __acquires(ctx) __no_context_analysis
> [ ... ]
> static inline void ww_acquire_done(struct ww_acquire_ctx *ctx)
> + __releases(ctx) __acquires_shared(ctx) __no_context_analysis
> {
> [ ... ]
> static inline void ww_acquire_fini(struct ww_acquire_ctx *ctx)
> + __releases_shared(ctx) __no_context_analysis
The above changes make it mandatory to call ww_acquire_done() before
calling ww_acquire_fini(). In Documentation/locking/ww-mutex-design.rst
there is an example where there is no ww_acquire_done() call between
ww_acquire_init() and ww_acquire_fini() (see also line 202). The
function dma_resv_lockdep() in drivers/dma-buf/dma-resv.c doesn't call
ww_acquire_done() at all. Does this mean that the above annotations are
wrong? Is there a better solution than removing the __acquire() and
__release() annotations from the above three functions?
Bart.
More information about the Linux-security-module-archive
mailing list