mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-04-26 16:23:57 +00:00
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-y += cpuidle.o driver.o governor.o sysfs.o governors/
|
||||||
obj-$(CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED) += coupled.o
|
obj-$(CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED) += coupled.o
|
||||||
obj-$(CONFIG_DT_IDLE_STATES) += dt_idle_states.o
|
obj-$(CONFIG_DT_IDLE_STATES) += dt_idle_states.o
|
||||||
|
obj-$(CONFIG_ARCH_HAS_CPU_RELAX) += poll_state.o
|
||||||
|
|
||||||
##################################################################################
|
##################################################################################
|
||||||
# ARM SoC drivers
|
# 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
|
* __cpuidle_register_driver: register the driver
|
||||||
* @drv: a valid pointer to a struct cpuidle_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
|
#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 *
|
* CPUIDLE GOVERNOR INTERFACE *
|
||||||
******************************/
|
******************************/
|
||||||
|
|
Loading…
Add table
Reference in a new issue