void cpu_idle(void) { set_thread_flag(TIF_POLLING_NRFLAG); /* endless idle loop with no priority at all */ while (1) { tick_nohz_idle_enter(); rcu_idle_enter(); while (!need_resched()) { check_pgt_cache(); rmb(); clear_thread_flag(TIF_POLLING_NRFLAG); local_irq_disable(); /* Don't trace irqs off for idle */ stop_critical_timings(); if (!need_resched() && powersave != NULL) powersave(); start_critical_timings(); local_irq_enable(); set_thread_flag(TIF_POLLING_NRFLAG); } rcu_idle_exit(); tick_nohz_idle_exit(); preempt_enable_no_resched(); schedule(); preempt_disable(); } }
void cpu_idle(void) { int spr_sr; for (;;) { // __PHX__ TODO: make an config option or something #if 1 if (!(SPR_SR_TEE & (spr_sr = mfspr(SPR_SR)))) { printk("idled: tick timer disabled, enabling...\n"); printk("idled: SR 0x%lx, ESR 0x%lx, EPCR 0x%lx, EEAR 0x%lx\n", mfspr(SPR_SR), mfspr(SPR_ESR_BASE), mfspr(SPR_EPCR_BASE), mfspr(SPR_EEAR_BASE)); mtspr(SPR_SR, spr_sr | SPR_SR_TEE); // __PHX__ TODO: add trace } #endif if (!need_resched()) { if (powersave != NULL) { powersave(); } } #if 0 if (need_resched()) schedule(); #else schedule(); #endif } }
void default_idle(void) { void (*powersave)(void); powersave = ppc_md.power_save; if (!need_resched()) { if (powersave != NULL) powersave(); #ifdef CONFIG_SMP else { set_thread_flag(TIF_POLLING_NRFLAG); while (!need_resched() && !cpu_is_offline(smp_processor_id())) barrier(); clear_thread_flag(TIF_POLLING_NRFLAG); } #endif } }
void default_idle(void) { void (*powersave)(void); powersave = ppc_md.power_save; if (!need_resched()) { if (powersave != NULL) powersave(); #ifdef CONFIG_SMP else { set_thread_flag(TIF_POLLING_NRFLAG); while (!need_resched()) barrier(); clear_thread_flag(TIF_POLLING_NRFLAG); } #endif } if (need_resched()) schedule(); }
/* Put the LCD in a powered-down state */ void Nokia1202::end() { powersave(true); digitalWrite(_csPin, HIGH); }