All of lore.kernel.org
 help / color / mirror / Atom feed
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;
 
 	/*

  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.