summaryrefslogtreecommitdiffstats
path: root/kernel/sched.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-03-07 02:38:49 +0100
committerLinus Torvalds <torvalds@g5.osdl.org>2006-03-07 02:38:49 +0100
commit8ba7b0a14b2ec19583bedbcdbea7f1c5008fc922 (patch)
tree5047966d39ce26f7afd96b794dd4dc6a995458a5 /kernel/sched.c
parent[PATCH] USB Serial: fix use-after-free bug in usb-serial core (diff)
downloadlinux-8ba7b0a14b2ec19583bedbcdbea7f1c5008fc922.tar.xz
linux-8ba7b0a14b2ec19583bedbcdbea7f1c5008fc922.zip
Add early-boot-safety check to cond_resched()
Just to be safe, we should not trigger a conditional reschedule during the early boot sequence. We've historically done some questionable early on, and the safety warnings in __might_sleep() are generally turned off during that period, so there might be problems lurking. This affects CONFIG_PREEMPT_VOLUNTARY, which takes over might_sleep() to cause a voluntary conditional reschedule. Acked-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/sched.c')
-rw-r--r--kernel/sched.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 12d291bf3379..3454bb869fd0 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -4028,6 +4028,8 @@ static inline void __cond_resched(void)
*/
if (unlikely(preempt_count()))
return;
+ if (unlikely(system_state != SYSTEM_RUNNING))
+ return;
do {
add_preempt_count(PREEMPT_ACTIVE);
schedule();