Re: [PATCH v2] locking/rtmutex: Annotate API and implementation

From: Bart Van Assche

Date: Tue May 05 2026 - 16:09:07 EST


On 5/5/26 6:12 PM, Sebastian Andrzej Siewior wrote:
On 2026-05-05 04:26:44 [+0200], Bart Van Assche wrote:
+context_lock_struct(rt_mutex);

What does this do? Shouldn't this define the struct?

This enables context locking support for struct rt_mutex. I placed context_lock_struct() on a line by itself because in my opinion that
results in a header file that is easier to read compared to
context_lock_struct(name) { ... }.

--- a/kernel/locking/rtmutex_api.c
+++ b/kernel/locking/rtmutex_api.c
@@ -66,12 +67,14 @@ EXPORT_SYMBOL(rt_mutex_base_init);
* @subclass: the lockdep subclass
*/
void __sched rt_mutex_lock_nested(struct rt_mutex *lock, unsigned int subclass)
+ __no_context_analysis /* ignoring the return value below is fine in this case */
{
__rt_mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, NULL, subclass);
}
EXPORT_SYMBOL_GPL(rt_mutex_lock_nested);
void __sched _rt_mutex_lock_nest_lock(struct rt_mutex *lock, struct lockdep_map *nest_lock)
+ __no_context_analysis /* ignoring the return value below is fine in this case */
{
__rt_mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, nest_lock, 0);
}

*Why* is it okay? Because the void always acquire the lock and only the
conditional locking (which can be interrupted by signal/ timeout) return
an error if they failed to acquire the lock.

Yes, that's correct.

Something like that would be nice for the comment.

Not sure if "__no_context_analysis" is the right thing to do here.
__acquires(lock) __no_context_analysis

might be better if just __acquires leads to trouble.

There is an alternative that does not require __no_context_analysis:

void __sched rt_mutex_lock_nested(struct rt_mutex *lock, unsigned int subclass)
{
int ret = __rt_mutex_lock_common(lock, TASK_UNINTERRUPTIBLE, NULL, subclass);

BUG_ON(ret);
}
EXPORT_SYMBOL_GPL(rt_mutex_lock_nested);

Please let me know which style you prefer.

Thanks,

Bart.