summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@penguin.transmeta.com>2002-04-04 01:56:34 -0800
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-04-04 01:56:34 -0800
commitdf6e3433e609824df19af14384fba06d5dfd2f78 (patch)
tree11edff7dc7a39eddfad0a865eef85d63598f47e9
parent326e5830cf979d859551462134a9b0ef8f586fa4 (diff)
Scheduler preempt fixes and cleanups
-rw-r--r--kernel/sched.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/kernel/sched.c b/kernel/sched.c
index 1d354ca3eaef..e746d65c7efa 100644
--- a/kernel/sched.c
+++ b/kernel/sched.c
@@ -782,9 +782,7 @@ need_resched:
case TASK_RUNNING:
;
}
-#if CONFIG_SMP || CONFIG_PREEMPT
pick_next_task:
-#endif
if (unlikely(!rq->nr_running)) {
#if CONFIG_SMP
load_balance(rq, 1);
@@ -848,12 +846,14 @@ switch_tasks:
*/
asmlinkage void preempt_schedule(void)
{
- if (unlikely(preempt_get_count()))
+ struct thread_info *ti = current_thread_info();
+
+ if (unlikely(ti->preempt_count))
return;
- current_thread_info()->preempt_count += PREEMPT_ACTIVE;
+ ti->preempt_count = PREEMPT_ACTIVE;
schedule();
- current_thread_info()->preempt_count -= PREEMPT_ACTIVE;
+ ti->preempt_count = 0;
barrier();
}
#endif /* CONFIG_PREEMPT */