On 2025-04-30 20:27:15 [-0700], Alexei Starovoitov wrote: > --- a/include/linux/local_lock_internal.h > +++ b/include/linux/local_lock_internal.h > @@ -285,4 +288,9 @@ do { \ > __local_trylock(lock); \ > }) > > +/* migration must be disabled before calling __local_lock_is_locked */ > +#include "../../kernel/locking/rtmutex_common.h" > +#define __local_lock_is_locked(__lock) \ > + (rt_mutex_owner(&this_cpu_ptr(__lock)->lock) == current) So I've been looking if we really need rt_mutex_owner() or if rt_mutex_base_is_locked() could do the job. Judging from the slub-free case, the rt_mutex_base_is_locked() would be just fine. The alloc case on the other hand probably not so much. On the other hand since we don't accept allocations from hardirq or NMI the "caller == owner" case should never be observed. Unless buggy & debugging and this should then also be observed by lockdep. Right? If there is another case where recursion can be observed and need to be addressed I would prefer to move the function (+define) to include/linux/rtmutex.h. instead of doing this "../../ include". > #endif /* CONFIG_PREEMPT_RT */ Sebastian