Re: [PATCH RESEND 1/3] locking: add rwsem_is_write_locked(), update non-lockdep asserts
From: Lorenzo Stoakes
Date: Fri Jan 16 2026 - 11:22:16 EST
On Fri, Jan 16, 2026 at 04:57:43PM +0100, Sebastian Andrzej Siewior wrote:
> On 2026-01-16 15:50:24 [+0000], Lorenzo Stoakes wrote:
> > No, but we need to be able to assert that one of two locks are held and we
> > don't want the failure of one being held to cause an assert when the other
> > isn't.
>
> But why don't you use the lockdep based check? That assert only ensures
Not sure what you mean, the checks I'm adding don't exist yet.
> that it is locked at the time you did the check. This does not mean you
> are owner - it could be owned by another task which is unrelated to your
> cause.
Yup I'm aware that lockdep tests more than a simple assert.
I wasn't aware this was possible with the lockdep primitives, mea culpa.
Also this came out of a previous discussion where I added a similar
predicate vma_is_detached() and Suren suggested similar for the locks.
Anyway, I went and looked and yes I see there's lockdep_is_held() for
instance.
However, I'd STILL need to do what I'm doing here to account for
CONFIG_DEBUG_VM && !CONFIG_LOCKDEP configurations right?
So I'll respin later with if (IS_ENABLED(CONFIG_LOCKDEP)) ...
And sprinkle with some lockdep_is_held() and see how that works.
I mean rwsem_is_locked() is already specified, so naming is going to be a
thing now but I guess:
static inline bool rwsem_is_locked_nolockdep(const struct rw_semaphore *sem)
{
return rw_base_is_locked(&sem->rwbase);
}
static inline bool rwsem_is_locked(const struct rw_semaphore *sem)
{
if (IS_ENABLED(CONFIG_LOCKDEP))
return lockdep_is_held(sem);
return rwsem_is_locked_nolockdep(sem);
}
And obviously equivalent for the write case is what's necessary now right?
Or am I misunderstanding you?
>
> Sebastian
Thanks, Lorenzo