diff options
author | Ingo Molnar <mingo@elte.hu> | 2005-07-08 02:57:04 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-08 03:23:47 +0200 |
commit | 5bbcfd9000887c0da7d57cc7b3ac869fc0dd5aa9 (patch) | |
tree | 7047a60dc99e5484560b40027c81f92a4e291b29 /kernel/sched.c | |
parent | [PATCH] Keys: Base keyring size on key pointer not key struct (diff) | |
download | linux-5bbcfd9000887c0da7d57cc7b3ac869fc0dd5aa9.tar.xz linux-5bbcfd9000887c0da7d57cc7b3ac869fc0dd5aa9.zip |
[PATCH] cond_resched(): fix bogus might_sleep() warning
The BKS might be reacquired before we have dropped PREEMPT_ACTIVE, which
could trigger a second could trigger a second cond_resched() call. Bug
found by Hirofumi Ogawa.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r-- | kernel/sched.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 5f2182d42241..4107db0dc091 100644 --- a/kernel/sched.c +++ b/kernel/sched.c @@ -3877,6 +3877,13 @@ asmlinkage long sys_sched_yield(void) static inline void __cond_resched(void) { + /* + * The BKS might be reacquired before we have dropped + * PREEMPT_ACTIVE, which could trigger a second + * cond_resched() call. + */ + if (unlikely(preempt_count())) + return; do { add_preempt_count(PREEMPT_ACTIVE); schedule(); |