Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0087298f authored by Thomas Gleixner's avatar Thomas Gleixner
Browse files

arm64: Use generic idle loop



Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Rusty Russell <rusty@rustcorp.com.au>
Cc: Paul McKenney <paulmck@linux.vnet.ibm.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Reviewed-by: default avatarCc: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
Cc: Magnus Damm <magnus.damm@gmail.com>
Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
Link: http://lkml.kernel.org/r/20130321215233.887563095@linutronix.de
parent f7b861b7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ config ARM64
	select CLONE_BACKWARDS
	select COMMON_CLK
	select GENERIC_CLOCKEVENTS
	select GENERIC_IDLE_LOOP
	select GENERIC_IOMAP
	select GENERIC_IRQ_PROBE
	select GENERIC_IRQ_SHOW
+5 −38
Original line number Diff line number Diff line
@@ -84,11 +84,15 @@ EXPORT_SYMBOL_GPL(pm_power_off);
void (*pm_restart)(const char *cmd);
EXPORT_SYMBOL_GPL(pm_restart);

void arch_cpu_idle_prepare(void)
{
	local_fiq_enable();
}

/*
 * This is our default idle handler.
 */
static void default_idle(void)
void arch_cpu_idle(void)
{
	/*
	 * This should do all the clock switching and wait for interrupt
@@ -98,43 +102,6 @@ static void default_idle(void)
	local_irq_enable();
}

/*
 * The idle thread.
 * We always respect 'hlt_counter' to prevent low power idle.
 */
void cpu_idle(void)
{
	local_fiq_enable();

	/* endless idle loop with no priority at all */
	while (1) {
		tick_nohz_idle_enter();
		rcu_idle_enter();
		while (!need_resched()) {
			/*
			 * We need to disable interrupts here to ensure
			 * we don't miss a wakeup call.
			 */
			local_irq_disable();
			if (!need_resched()) {
				stop_critical_timings();
				default_idle();
				start_critical_timings();
				/*
				 * default_idle functions should always return
				 * with IRQs enabled.
				 */
				WARN_ON(irqs_disabled());
			} else {
				local_irq_enable();
			}
		}
		rcu_idle_exit();
		tick_nohz_idle_exit();
		schedule_preempt_disabled();
	}
}

void machine_shutdown(void)
{
#ifdef CONFIG_SMP
+1 −1
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ asmlinkage void __cpuinit secondary_start_kernel(void)
	/*
	 * OK, it's off to the idle thread for us
	 */
	cpu_idle();
	cpu_startup_entry(CPUHP_ONLINE);
}

void __init smp_cpus_done(unsigned int max_cpus)