On Thu, Jun 30, 2022 at 09:34:10AM -0700, Linus Torvalds wrote: Not commenting on sparse, since I'm not much qualified there, however, > include/linux/compiler_types.h | 2 ++ > include/linux/refcount.h | 6 +++--- > 2 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/include/linux/compiler_types.h b/include/linux/compiler_types.h > index d08dfcb0ac68..4f2a819fd60a 100644 > --- a/include/linux/compiler_types.h > +++ b/include/linux/compiler_types.h > @@ -24,6 +24,7 @@ static inline void __chk_io_ptr(const volatile void __iomem *ptr) { } > /* context/locking */ > # define __must_hold(x) __attribute__((context(x,1,1))) > # define __acquires(x) __attribute__((context(x,0,1))) > +# define __cond_acquires(x) __attribute__((context(x,0,-1))) > # define __releases(x) __attribute__((context(x,1,0))) > # define __acquire(x) __context__(x,1) > # define __release(x) __context__(x,-1) > @@ -50,6 +51,7 @@ static inline void __chk_io_ptr(const volatile void __iomem *ptr) { } > /* context/locking */ > # define __must_hold(x) > # define __acquires(x) > +# define __cond_acquires(x) > # define __releases(x) > # define __acquire(x) (void)0 > # define __release(x) (void)0 > diff --git a/include/linux/refcount.h b/include/linux/refcount.h > index b8a6e387f8f9..a62fcca97486 100644 > --- a/include/linux/refcount.h > +++ b/include/linux/refcount.h > @@ -361,9 +361,9 @@ static inline void refcount_dec(refcount_t *r) > > extern __must_check bool refcount_dec_if_one(refcount_t *r); > extern __must_check bool refcount_dec_not_one(refcount_t *r); > -extern __must_check bool refcount_dec_and_mutex_lock(refcount_t *r, struct mutex *lock); > -extern __must_check bool refcount_dec_and_lock(refcount_t *r, spinlock_t *lock); > +extern __must_check bool refcount_dec_and_mutex_lock(refcount_t *r, struct mutex *lock) __cond_acquires(lock); > +extern __must_check bool refcount_dec_and_lock(refcount_t *r, spinlock_t *lock) __cond_acquires(lock); > extern __must_check bool refcount_dec_and_lock_irqsave(refcount_t *r, > spinlock_t *lock, > - unsigned long *flags); > + unsigned long *flags) __cond_acquires(lock); > #endif /* _LINUX_REFCOUNT_H */ YES!, thank you!