Index: linux-2.6.9-rc2-mm2/kernel/sched.c
===================================================================
--- linux-2.6.9-rc2-mm2.orig/kernel/sched.c	2004-09-24 00:16:44.818321618 +1000
+++ linux-2.6.9-rc2-mm2/kernel/sched.c	2004-09-24 00:20:47.713315929 +1000
@@ -2363,13 +2363,6 @@ switch_tasks:
 	clear_tsk_need_resched(prev);
 	rcu_qsctr_inc(task_cpu(prev));
 
-	if (next->flags & PF_YIELDED) {
-		next->flags &= ~PF_YIELDED;
-		dequeue_task(next, rq);
-		next->prio = effective_prio(next);
-		enqueue_task_head(next, rq);
-	}
-
 	sched_info_switch(prev, next);
 	if (next == rq->idle || next->policy == SCHED_FIFO)
 		del_expiry_timer(cpu, rq);
@@ -2381,6 +2374,13 @@ switch_tasks:
 	}
 
 	if (likely(prev != next)) {
+		if (unlikely(next->flags & PF_YIELDED)) {
+			next->flags &= ~PF_YIELDED;
+			dequeue_task(next, rq);
+			next->prio = effective_prio(next);
+			enqueue_task_head(next, rq);
+		}
+
 		rq->preempted = 0;
 		rq->cache_ticks = 0;
 		next->timestamp = now;
