Пример #1
0
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();
	}
}
Пример #2
0
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

	}
}
Пример #3
0
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
	}
}
Пример #4
0
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();
}
Пример #5
0
/* Put the LCD in a powered-down state */
void Nokia1202::end()
{
  powersave(true);
  digitalWrite(_csPin, HIGH);
}