From: Nick Piggin 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(); _