@@ -138,7 +138,8 @@ static void idle_inject_fn(unsigned int cpu)
*/
iit->should_run = 0;
- play_idle(READ_ONCE(ii_dev->idle_duration_us));
+ play_idle(READ_ONCE(ii_dev->idle_duration_us),
+ cpuidle_find_deepest_state());
}
/**
@@ -29,6 +29,7 @@
#include <linux/delay.h>
#include <linux/kthread.h>
#include <linux/cpu.h>
+#include <linux/cpuidle.h>
#include <linux/thermal.h>
#include <linux/slab.h>
#include <linux/tick.h>
@@ -430,7 +431,8 @@ static void clamp_idle_injection_func(struct kthread_work *work)
if (should_skip)
goto balance;
- play_idle(jiffies_to_usecs(w_data->duration_jiffies));
+ play_idle(jiffies_to_usecs(w_data->duration_jiffies),
+ cpuidle_find_deepest_state());
balance:
if (clamping && w_data->clamping && cpu_online(w_data->cpu))
@@ -179,7 +179,7 @@ void arch_cpu_idle_dead(void);
int cpu_report_state(int cpu);
int cpu_check_up_prepare(int cpu);
void cpu_set_state_online(int cpu);
-void play_idle(unsigned long duration_us);
+void play_idle(unsigned long duration_us, int state);
#ifdef CONFIG_HOTPLUG_CPU
bool cpu_wait_death(unsigned int cpu, int seconds);
@@ -311,7 +311,7 @@ static enum hrtimer_restart idle_inject_timer_fn(struct hrtimer *timer)
return HRTIMER_NORESTART;
}
-void play_idle(unsigned long duration_us)
+void play_idle(unsigned long duration_us, int state)
{
struct idle_timer it;
@@ -328,7 +328,7 @@ void play_idle(unsigned long duration_us)
rcu_sleep_check();
preempt_disable();
current->flags |= PF_IDLE;
- cpuidle_use_state(cpuidle_find_deepest_state());
+ cpuidle_use_state(state);
it.done = 0;
hrtimer_init_on_stack(&it.timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
Currently, the play_idle function does not allow to tell which idle state we want to go. Improve this by passing the idle state as parameter to the function. There is no functional changes, the cpuidle state is the deepest one. Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> --- drivers/powercap/idle_inject.c | 3 ++- drivers/thermal/intel/intel_powerclamp.c | 4 +++- include/linux/cpu.h | 2 +- kernel/sched/idle.c | 4 ++-- 4 files changed, 8 insertions(+), 5 deletions(-) -- 2.17.1