From: Nick Piggin <nickpiggin@yahoo.com.au>

this_rq_lock does a local_irq_disable, and sched_yield() needs to undo
that.


---

 25-akpm/kernel/sched.c |    1 +
 1 files changed, 1 insertion(+)

diff -puN kernel/sched.c~yield_irq kernel/sched.c
--- 25/kernel/sched.c~yield_irq	2004-05-11 23:57:25.660198824 -0700
+++ 25-akpm/kernel/sched.c	2004-05-11 23:57:25.666197912 -0700
@@ -2979,6 +2979,7 @@ asmlinkage long sys_sched_yield(void)
 	 * no need to preempt:
 	 */
 	_raw_spin_unlock(&rq->lock);
+	local_irq_enable();
 	preempt_enable_no_resched();
 
 	schedule();

_