select NO_IOPORT
        select GENERIC_IOMAP
        select GENERIC_SMP_IDLE_THREAD
+       select GENERIC_IDLE_LOOP
        select STACKTRACE_SUPPORT
        select KTIME_SCALAR
        select GENERIC_CLOCKEVENTS
 
  *  If hardware or VM offer wait termination even though interrupts
  *  are disabled.
  */
-static void default_idle(void)
+void arch_cpu_idle(void)
 {
        __vmwait();
-}
-
-void (*idle_sleep)(void) = default_idle;
-
-void cpu_idle(void)
-{
-       while (1) {
-               tick_nohz_idle_enter();
-               local_irq_disable();
-               while (!need_resched()) {
-                       idle_sleep();
-                       /*  interrupts wake us up, but aren't serviced  */
-                       local_irq_enable();     /* service interrupt   */
-                       local_irq_disable();
-               }
-               local_irq_enable();
-               tick_nohz_idle_exit();
-               schedule();
-       }
+       /*  interrupts wake us up, but irqs are still disabled */
+       local_irq_enable();
 }
 
 /*