diff options
| author | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-04-04 01:56:34 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@penguin.transmeta.com> | 2002-04-04 01:56:34 -0800 |
| commit | df6e3433e609824df19af14384fba06d5dfd2f78 (patch) | |
| tree | 11edff7dc7a39eddfad0a865eef85d63598f47e9 | |
| parent | 326e5830cf979d859551462134a9b0ef8f586fa4 (diff) | |
Scheduler preempt fixes and cleanups
| -rw-r--r-- | kernel/sched.c | 10 |
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 */ |
