]> git.hungrycats.org Git - linux/commitdiff
Scheduler preempt fixes and cleanups
authorLinus Torvalds <torvalds@penguin.transmeta.com>
Thu, 4 Apr 2002 09:56:34 +0000 (01:56 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Thu, 4 Apr 2002 09:56:34 +0000 (01:56 -0800)
kernel/sched.c

index 1d354ca3eaefb5aa321b64ebb15ef9f09ab00fb3..e746d65c7efaa3c7422770c22ac907be4389e1a5 100644 (file)
@@ -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 */