cpuidle: Make drivers initialize polling state
Make the drivers that want to include the polling state into their states table initialize it explicitly and drop the initialization of it (which in fact is conditional, but that is not obvious from the code) from the core. 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
34c2f65b71
commit
1b39e3f813
|
@ -842,7 +842,7 @@ static int acpi_processor_setup_cpuidle_cx(struct acpi_processor *pr,
|
||||||
|
|
||||||
static int acpi_processor_setup_cstates(struct acpi_processor *pr)
|
static int acpi_processor_setup_cstates(struct acpi_processor *pr)
|
||||||
{
|
{
|
||||||
int i, count = ACPI_IDLE_STATE_START;
|
int i, count;
|
||||||
struct acpi_processor_cx *cx;
|
struct acpi_processor_cx *cx;
|
||||||
struct cpuidle_state *state;
|
struct cpuidle_state *state;
|
||||||
struct cpuidle_driver *drv = &acpi_idle_driver;
|
struct cpuidle_driver *drv = &acpi_idle_driver;
|
||||||
|
@ -850,6 +850,13 @@ static int acpi_processor_setup_cstates(struct acpi_processor *pr)
|
||||||
if (max_cstate == 0)
|
if (max_cstate == 0)
|
||||||
max_cstate = 1;
|
max_cstate = 1;
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_ARCH_HAS_CPU_RELAX)) {
|
||||||
|
cpuidle_poll_state_init(drv);
|
||||||
|
count = 1;
|
||||||
|
} else {
|
||||||
|
count = 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
|
for (i = 1; i < ACPI_PROCESSOR_MAX_POWER && i <= max_cstate; i++) {
|
||||||
cx = &pr->power.states[i];
|
cx = &pr->power.states[i];
|
||||||
|
|
||||||
|
|
|
@ -216,8 +216,6 @@ static int __cpuidle_register_driver(struct cpuidle_driver *drv)
|
||||||
on_each_cpu_mask(drv->cpumask, cpuidle_setup_broadcast_timer,
|
on_each_cpu_mask(drv->cpumask, cpuidle_setup_broadcast_timer,
|
||||||
(void *)1, 1);
|
(void *)1, 1);
|
||||||
|
|
||||||
poll_idle_init(drv);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ static int __cpuidle poll_idle(struct cpuidle_device *dev,
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void poll_idle_init(struct cpuidle_driver *drv)
|
void cpuidle_poll_state_init(struct cpuidle_driver *drv)
|
||||||
{
|
{
|
||||||
struct cpuidle_state *state = &drv->states[0];
|
struct cpuidle_state *state = &drv->states[0];
|
||||||
|
|
||||||
|
@ -34,3 +34,4 @@ void poll_idle_init(struct cpuidle_driver *drv)
|
||||||
state->disabled = false;
|
state->disabled = false;
|
||||||
state->flags = CPUIDLE_FLAG_POLLING;
|
state->flags = CPUIDLE_FLAG_POLLING;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(cpuidle_poll_state_init);
|
||||||
|
|
|
@ -1331,6 +1331,7 @@ static void __init intel_idle_cpuidle_driver_init(void)
|
||||||
|
|
||||||
intel_idle_state_table_update();
|
intel_idle_state_table_update();
|
||||||
|
|
||||||
|
cpuidle_poll_state_init(drv);
|
||||||
drv->state_count = 1;
|
drv->state_count = 1;
|
||||||
|
|
||||||
for (cstate = 0; cstate < CPUIDLE_STATE_MAX; ++cstate) {
|
for (cstate = 0; cstate < CPUIDLE_STATE_MAX; ++cstate) {
|
||||||
|
|
|
@ -226,9 +226,9 @@ static inline void cpuidle_coupled_parallel_barrier(struct cpuidle_device *dev,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_ARCH_HAS_CPU_RELAX
|
#ifdef CONFIG_ARCH_HAS_CPU_RELAX
|
||||||
void poll_idle_init(struct cpuidle_driver *drv);
|
void cpuidle_poll_state_init(struct cpuidle_driver *drv);
|
||||||
#else
|
#else
|
||||||
static void poll_idle_init(struct cpuidle_driver *drv) {}
|
static inline void cpuidle_poll_state_init(struct cpuidle_driver *drv) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/******************************
|
/******************************
|
||||||
|
|
Loading…
Reference in New Issue
Block a user