Index: linux-2.6.14/arch/arm/kernel/process.c =================================================================== --- linux-2.6.14.orig/arch/arm/kernel/process.c +++ linux-2.6.14/arch/arm/kernel/process.c @@ -89,12 +89,12 @@ void default_idle(void) if (hlt_counter) cpu_relax(); else { - raw_local_irq_disable(); + __raw_local_irq_disable(); if (!need_resched()) { timer_dyn_reprogram(); arch_idle(); } - raw_local_irq_enable(); + __raw_local_irq_enable(); } } @@ -121,8 +121,10 @@ void cpu_idle(void) if (!idle) idle = default_idle; leds_event(led_idle_start); + __preempt_enable_no_resched(); while (!need_resched()) idle(); + preempt_disable(); leds_event(led_idle_end); __preempt_enable_no_resched(); __schedule();