From: Marco Elver <elver@google.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org, bigeasy@linutronix.de,
mingo@kernel.org, tglx@linutronix.de, will@kernel.org,
boqun.feng@gmail.com, longman@redhat.com, hch@lst.de,
rostedt@goodmis.org, bvanassche@acm.org, llvm@lists.linux.dev
Subject: Re: [RFC][PATCH 0/4] locking: Add/convert context analysis bits
Date: Wed, 21 Jan 2026 14:07:28 +0100 [thread overview]
Message-ID: <aXDPkGmsSKuhFyOS@elver.google.com> (raw)
In-Reply-To: <20260121110704.221498346@infradead.org>
On Wed, Jan 21, 2026 at 12:07PM +0100, Peter Zijlstra wrote:
> Hai
>
> This is on top of tip/locking/core with these patches on:
>
> https://lkml.kernel.org/r/20260119094029.1344361-1-elver@google.com
>
> and converts mutex, rtmutex, ww_mutex and futex to use the new context analysis
> bits.
>
> There is one snafu:
>
> ww_mutex_set_context_fastpath()'s data_race() usage doesn't stop the compiler
> from complaining when building a defconfig+PREEMPT_RT+LOCKDEP build:
>
> ../kernel/locking/ww_mutex.h:439:24: error: calling function '__ww_mutex_has_waiters' requires holding raw_spinlock 'lock->base.rtmutex.wait_lock' exclusively [-Werror,-Wthread-safety-analysis]
> 439 | if (likely(!data_race(__ww_mutex_has_waiters(&lock->base))))
> | ^
> 1 error generated.
This works:
diff --git a/kernel/locking/ww_mutex.h b/kernel/locking/ww_mutex.h
index 73eed6b7f24e..561e2475954d 100644
--- a/kernel/locking/ww_mutex.h
+++ b/kernel/locking/ww_mutex.h
@@ -436,7 +436,8 @@ ww_mutex_set_context_fastpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
* __ww_mutex_add_waiter() and makes sure we either observe ww->ctx
* and/or !empty list.
*/
- if (likely(!data_race(__ww_mutex_has_waiters(&lock->base))))
+ bool has_waiters = data_race(__ww_mutex_has_waiters(&lock->base));
+ if (likely(!has_waiters))
return;
/*
It appears that the _Pragma are ignored when the expression is inside
__builtin_expect(...). That's a bit inconvenient.
Another option is this given its exclusively used without holding this
lock:
diff --git a/kernel/locking/ww_mutex.h b/kernel/locking/ww_mutex.h
index 73eed6b7f24e..45a9c394fe91 100644
--- a/kernel/locking/ww_mutex.h
+++ b/kernel/locking/ww_mutex.h
@@ -71,7 +71,7 @@ __ww_mutex_owner(struct mutex *lock)
}
static inline bool
-__ww_mutex_has_waiters(struct mutex *lock)
+__ww_mutex_has_waiters_lockless(struct mutex *lock)
{
return atomic_long_read(&lock->owner) & MUTEX_FLAG_WAITERS;
}
@@ -151,10 +151,9 @@ __ww_mutex_owner(struct rt_mutex *lock)
}
static inline bool
-__ww_mutex_has_waiters(struct rt_mutex *lock)
- __must_hold(&lock->rtmutex.wait_lock)
+__ww_mutex_has_waiters_lockless(struct rt_mutex *lock)
{
- return rt_mutex_has_waiters(&lock->rtmutex);
+ return data_race(rt_mutex_has_waiters(&lock->rtmutex));
}
static inline void lock_wait_lock(struct rt_mutex *lock, unsigned long *flags)
@@ -436,7 +435,7 @@ ww_mutex_set_context_fastpath(struct ww_mutex *lock, struct ww_acquire_ctx *ctx)
* __ww_mutex_add_waiter() and makes sure we either observe ww->ctx
* and/or !empty list.
*/
- if (likely(!data_race(__ww_mutex_has_waiters(&lock->base))))
+ if (likely(!__ww_mutex_has_waiters_lockless(&lock->base)))
return;
/*
next prev parent reply other threads:[~2026-01-21 13:07 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-21 11:07 [RFC][PATCH 0/4] locking: Add/convert context analysis bits Peter Zijlstra
2026-01-21 11:07 ` [RFC][PATCH 1/4] compiler-context-analysys: Add __cond_releases() Peter Zijlstra
2026-01-21 13:09 ` Marco Elver
2026-01-21 17:55 ` Bart Van Assche
2026-01-21 18:35 ` Marco Elver
2026-01-21 19:02 ` Peter Zijlstra
2026-01-21 21:02 ` Bart Van Assche
2026-03-09 19:48 ` [tip: locking/core] " tip-bot2 for Peter Zijlstra
2026-01-21 11:07 ` [RFC][PATCH 2/4] locking/mutex: Add context analysis Peter Zijlstra
2026-01-21 17:11 ` Bart Van Assche
2026-01-21 18:59 ` Peter Zijlstra
2026-03-09 19:48 ` [tip: locking/core] " tip-bot2 for Peter Zijlstra
2026-01-21 11:07 ` [RFC][PATCH 3/4] locking/rtmutex: " Peter Zijlstra
2026-01-21 17:15 ` Bart Van Assche
2026-01-21 19:01 ` Peter Zijlstra
2026-03-09 19:48 ` [tip: locking/core] " tip-bot2 for Peter Zijlstra
2026-01-21 11:07 ` [RFC][PATCH 4/4] futex: Convert to compiler " Peter Zijlstra
2026-01-21 13:19 ` Peter Zijlstra
2026-03-18 8:02 ` [tip: locking/core] " tip-bot2 for Peter Zijlstra
2026-01-21 13:07 ` Marco Elver [this message]
2026-01-21 19:23 ` [RFC][PATCH 0/4] locking: Add/convert context analysis bits Peter Zijlstra
2026-01-21 20:37 ` Bart Van Assche
2026-01-22 9:04 ` Peter Zijlstra
2026-01-22 16:28 ` Bart Van Assche
2026-01-22 18:58 ` Nathan Chancellor
2026-01-23 11:06 ` Peter Zijlstra
2026-01-23 11:15 ` Peter Zijlstra
2026-01-23 18:58 ` Bart Van Assche
2026-01-23 20:15 ` Marco Elver
2026-01-23 14:16 ` Sebastian Andrzej Siewior
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aXDPkGmsSKuhFyOS@elver.google.com \
--to=elver@google.com \
--cc=bigeasy@linutronix.de \
--cc=boqun.feng@gmail.com \
--cc=bvanassche@acm.org \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=longman@redhat.com \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox