Ingo, Every so often we get bit by a bug "scheduling in atomic", and it comes from a rtmutex spin_lock. The bug only happens when that lock has contention, so we miss it a lot.
This patch adds a might_sleep() to the rt_spin_lock_fastlock to find bugs where we can schedule in atomic. The one place that exists now is from do_page_fault and sending a signal. I wrote a simple crash program that segfaults (attached) and with this patch, I get the warning. -- Steve Signed-off-by: Steven Rostedt <[EMAIL PROTECTED]> Index: linux-2.6.21-rt9/kernel/rtmutex.c =================================================================== --- linux-2.6.21-rt9.orig/kernel/rtmutex.c +++ linux-2.6.21-rt9/kernel/rtmutex.c @@ -602,6 +602,8 @@ static inline void rt_spin_lock_fastlock(struct rt_mutex *lock, void fastcall (*slowfn)(struct rt_mutex *lock)) { + might_sleep(); + if (likely(rt_mutex_cmpxchg(lock, NULL, current))) rt_mutex_deadlock_account_lock(lock, current); else
#include <stdio.h> #include <stdlib.h> #include <string.h> int main (int argc, char **argv) { unsigned long *p = (void*)-1; printf("crashing...\n"); /* nighty night */ *p = 0xbed; printf("did we crash??\n"); return 0; }