On Thu, Mar 21, 2013 at 09:53:00PM -0000, Thomas Gleixner wrote: > All idle functions in arch/* are more or less the same, plus minus a > few bugs and extra instrumentation, tickless support and other > optional items. > > Implement a generic idle function which resembles the functionality > found in arch/. Provide weak arch_cpu_idle_* functions which can be > overridden by the architecture code if needed. > > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> [...] > +static void cpu_idle_loop(void) > +{ > + while (1) { > + tick_nohz_idle_enter(); > + > + while (!need_resched()) { > + check_pgt_cache(); > + rmb(); > + > + if (cpu_is_offline(smp_processor_id())) > + arch_cpu_idle_dead(); > + > + local_irq_disable(); > + arch_cpu_idle_enter(); > + > + if (cpu_idle_force_poll) { > + cpu_idle_poll(); > + } else { > + current_clr_polling(); > + if (!need_resched()) { > + stop_critical_timings(); > + rcu_idle_enter(); > + arch_cpu_idle(); > + WARN_ON_ONCE(!irqs_disabled()); This should be WARN_ON_ONCE(irqs_disabled()), no? > + rcu_idle_exit(); > + start_critical_timings(); > + } else { > + local_irq_enable(); > + } > + current_set_polling(); > + } > + arch_cpu_idle_exit(); > + } > + tick_nohz_idle_exit(); I was wondering why the scheduler doesn't complain when being called with irqs disabled. In fact tick_nohz_idle_exit() enables irqs unconditionally iff CONFIG_NO_HZ is set. > + schedule_preempt_disabled(); > + } > +} > + > +void cpu_startup_entry(enum cpuhp_state state) > +{ > + current_set_polling(); > + arch_cpu_idle_prepare(); > + cpu_idle_loop(); > +} > +#endif -- To unsubscribe from this list: send the line "unsubscribe linux-arch" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html