cpuidle: Move polling state initialization code to separate file
Move the polling state initialization code to a separate file built conditionally on CONFIG_ARCH_HAS_CPU_RELAX to get rid of the #ifdef in driver.c. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Sudeep Holla <sudeep.holla@arm.com> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
This commit is contained in:
parent
dc2251bf98
commit
34c2f65b71
4 changed files with 43 additions and 31 deletions
|
@ -5,6 +5,7 @@
|
|||
obj-y += cpuidle.o driver.o governor.o sysfs.o governors/
|
||||
obj-$(CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED) += coupled.o
|
||||
obj-$(CONFIG_DT_IDLE_STATES) += dt_idle_states.o
|
||||
obj-$(CONFIG_ARCH_HAS_CPU_RELAX) += poll_state.o
|
||||
|
||||
##################################################################################
|
||||
# ARM SoC drivers
|
||||
|
|
|
@ -179,37 +179,6 @@ static void __cpuidle_driver_init(struct cpuidle_driver *drv)
|
|||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_CPU_RELAX
|
||||
static int __cpuidle poll_idle(struct cpuidle_device *dev,
|
||||
struct cpuidle_driver *drv, int index)
|
||||
{
|
||||
local_irq_enable();
|
||||
if (!current_set_polling_and_test()) {
|
||||
while (!need_resched())
|
||||
cpu_relax();
|
||||
}
|
||||
current_clr_polling();
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
static void poll_idle_init(struct cpuidle_driver *drv)
|
||||
{
|
||||
struct cpuidle_state *state = &drv->states[0];
|
||||
|
||||
snprintf(state->name, CPUIDLE_NAME_LEN, "POLL");
|
||||
snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
|
||||
state->exit_latency = 0;
|
||||
state->target_residency = 0;
|
||||
state->power_usage = -1;
|
||||
state->enter = poll_idle;
|
||||
state->disabled = false;
|
||||
state->flags = CPUIDLE_FLAG_POLLING;
|
||||
}
|
||||
#else
|
||||
static void poll_idle_init(struct cpuidle_driver *drv) {}
|
||||
#endif /* !CONFIG_ARCH_HAS_CPU_RELAX */
|
||||
|
||||
/**
|
||||
* __cpuidle_register_driver: register the driver
|
||||
* @drv: a valid pointer to a struct cpuidle_driver
|
||||
|
|
36
drivers/cpuidle/poll_state.c
Normal file
36
drivers/cpuidle/poll_state.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* poll_state.c - Polling idle state
|
||||
*
|
||||
* This file is released under the GPLv2.
|
||||
*/
|
||||
|
||||
#include <linux/cpuidle.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/sched/idle.h>
|
||||
|
||||
static int __cpuidle poll_idle(struct cpuidle_device *dev,
|
||||
struct cpuidle_driver *drv, int index)
|
||||
{
|
||||
local_irq_enable();
|
||||
if (!current_set_polling_and_test()) {
|
||||
while (!need_resched())
|
||||
cpu_relax();
|
||||
}
|
||||
current_clr_polling();
|
||||
|
||||
return index;
|
||||
}
|
||||
|
||||
void poll_idle_init(struct cpuidle_driver *drv)
|
||||
{
|
||||
struct cpuidle_state *state = &drv->states[0];
|
||||
|
||||
snprintf(state->name, CPUIDLE_NAME_LEN, "POLL");
|
||||
snprintf(state->desc, CPUIDLE_DESC_LEN, "CPUIDLE CORE POLL IDLE");
|
||||
state->exit_latency = 0;
|
||||
state->target_residency = 0;
|
||||
state->power_usage = -1;
|
||||
state->enter = poll_idle;
|
||||
state->disabled = false;
|
||||
state->flags = CPUIDLE_FLAG_POLLING;
|
||||
}
|
|
@ -225,6 +225,12 @@ static inline void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev,
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ARCH_HAS_CPU_RELAX
|
||||
void poll_idle_init(struct cpuidle_driver *drv);
|
||||
#else
|
||||
static void poll_idle_init(struct cpuidle_driver *drv) {}
|
||||
#endif
|
||||
|
||||
/******************************
|
||||
* CPUIDLE GOVERNOR INTERFACE *
|
||||
******************************/
|
||||
|
|
Loading…
Reference in a new issue