--- linux-2.6.22-630/kernel/sched.c.orig 2008-04-23 17:09:21.000000000 -0400 +++ linux-2.6.22-630/kernel/sched.c 2008-04-23 17:10:23.000000000 -0400 @@ -3656,6 +3656,10 @@ /* CHOPSTIX */ #endif +/* Bypass the vx_unhold infinite loop */ +unsigned int merry; +EXPORT_SYMBOL(merry); + asmlinkage void __sched schedule(void) { struct task_struct *prev, *next; @@ -3740,14 +3744,22 @@ cpu = smp_processor_id(); vx_set_rq_time(rq, jiffies); + + merry=0; try_unhold: vx_try_unhold(rq, cpu); pick_next: if (unlikely(!rq->nr_running)) { /* can we skip idle time? */ - if (vx_try_skip(rq, cpu)) + if (vx_try_skip(rq, cpu) && merry<10) { + merry++; goto try_unhold; + } + else if (merry==10) { + BUG(); + } + idle_balance(cpu, rq); if (!rq->nr_running) {