Messages in this thread Patch in this message | | | Subject | [PATCH RT] add might_sleep in rt_spin_lock_fastlock | From | Steven Rostedt <> | Date | Fri, 01 Jun 2007 18:35:21 -0400 |
| |
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 <rostedt@goodmis.org>
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; }
| |