summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2002-03-06 06:41:35 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2002-03-06 06:41:35 -0800
commitadc4bc979b028e76bb5859ca345c042d8cd903f2 (patch)
tree4a38bced5e4766fe4f2c27e798d59953e4856783
parenta925c40f775a179a971bfd77de8e3035c0afc1ac (diff)
Well, duh!
Initialize preempt count outside the spinlocks that can themselves impact it on SMP.
-rw-r--r--kernel/sched.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 81190071b159..45e3b6103360 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -1438,10 +1438,12 @@ void __init init_idle(task_t *idle, int cpu)
idle->prio = MAX_PRIO;
idle->state = TASK_RUNNING;
idle->thread_info->cpu = cpu;
- idle->thread_info->preempt_count = (idle->lock_depth >= 0);
double_rq_unlock(idle_rq, rq);
set_tsk_need_resched(idle);
__restore_flags(flags);
+
+ /* Set the preempt count _outside_ the spinlocks! */
+ idle->thread_info->preempt_count = (idle->lock_depth >= 0);
}
extern void init_timervecs(void);