diff options
| -rw-r--r-- | arch/x86/Kconfig | 3 | ||||
| -rw-r--r-- | drivers/cpuidle/cpuidle.c | 13 | 
2 files changed, 15 insertions, 1 deletions
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 65a70b777c1..a64d532dff4 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -102,6 +102,9 @@ config ARCH_HAS_ILOG2_U32  config ARCH_HAS_ILOG2_U64  	def_bool n +config ARCH_HAS_CPU_IDLE_WAIT +	def_bool y +  config GENERIC_CALIBRATE_DELAY  	def_bool y diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 2c4b2d47973..60f71e6345e 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -27,6 +27,17 @@ static void (*pm_idle_old)(void);  static int enabled_devices; +#if defined(CONFIG_ARCH_HAS_CPU_IDLE_WAIT) +static void cpuidle_kick_cpus(void) +{ +	cpu_idle_wait(); +} +#elif defined(CONFIG_SMP) +# error "Arch needs cpu_idle_wait() equivalent here" +#else /* !CONFIG_ARCH_HAS_CPU_IDLE_WAIT && !CONFIG_SMP */ +static void cpuidle_kick_cpus(void) {} +#endif +  /**   * cpuidle_idle_call - the main idle loop   * @@ -83,7 +94,7 @@ void cpuidle_uninstall_idle_handler(void)  {  	if (enabled_devices && (pm_idle != pm_idle_old)) {  		pm_idle = pm_idle_old; -		cpu_idle_wait(); +		cpuidle_kick_cpus();  	}  }  | 
