diff options
author | Steven Rostedt <rostedt@goodmis.org> | 2011-06-15 00:36:25 +0200 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2011-06-15 11:44:48 +0200 |
commit | 0da938c44921cfb690283d3b0c9c48a10375db2c (patch) | |
tree | 7e9374a3ed16a4118f2f5d600067c471aaa80c70 /kernel/sched_rt.c | |
parent | sched: Fix need_resched() when checking peempt (diff) | |
download | linux-0da938c44921cfb690283d3b0c9c48a10375db2c.tar.xz linux-0da938c44921cfb690283d3b0c9c48a10375db2c.zip |
sched: Check if lowest_mask is initialized in find_lowest_rq()
On system boot up, the lowest_mask is initialized with an
early_initcall(). But RT tasks may wake up on other
early_initcall() callers before the lowest_mask is initialized,
causing a system crash.
Commit "d72bce0e67 rcu: Cure load woes" was the first commit
to wake up RT tasks in early init. Before this commit this bug
should not happen.
Reported-by: Andrew Theurer <habanero@linux.vnet.ibm.com>
Tested-by: Andrew Theurer <habanero@linux.vnet.ibm.com>
Tested-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20110614223657.824872966@goodmis.org
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/sched_rt.c')
-rw-r--r-- | kernel/sched_rt.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 9b8d5dce946e..10d018212bab 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c @@ -1239,6 +1239,10 @@ static int find_lowest_rq(struct task_struct *task) int this_cpu = smp_processor_id(); int cpu = task_cpu(task); + /* Make sure the mask is initialized first */ + if (unlikely(!lowest_mask)) + return -1; + if (task->rt.nr_cpus_allowed == 1) return -1; /* No other targets possible */ |