summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2019-01-24 14:56:54 +0100
committerDaniel Lezcano <daniel.lezcano@linaro.org>2019-01-24 14:56:54 +0100
commitb68705a0522d1c309f02c38ee1d4ed725eabfd75 (patch)
treeefd8652f7d6518152a35f8afaffe33b9597ba903
parentf77ab16e505cd8a4ca7ec2cacc55d84f5496b2e0 (diff)
WIP 2
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r--drivers/cpuidle/cpuidle.c3
-rw-r--r--kernel/sched/idle.c7
2 files changed, 8 insertions, 2 deletions
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index 4efc0251e362..dfa26b7194bf 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -226,7 +226,8 @@ int cpuidle_enter_state(struct cpuidle_device *dev, struct cpuidle_driver *drv,
time_start = ns_to_ktime(local_clock());
stop_critical_timings();
- entered_state = target_state->enter(dev, drv, index);
+ entered_state = target_state->enter(dev, drv, 0);
+ entered_state = index;
start_critical_timings();
sched_clock_idle_wakeup_event();
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 205246751a6b..3420cee16532 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -184,7 +184,7 @@ static void cpuidle_idle_call(void)
call_cpuidle(drv, dev, next_state);
} else {
bool stop_tick = true;
- u64 next_event, now = local_clock();
+ u64 next_event, after, now = local_clock();
next_event = cpuidle_predict(drv, dev, now);
@@ -202,10 +202,15 @@ static void cpuidle_idle_call(void)
rcu_idle_enter();
entered_state = call_cpuidle(drv, dev, next_state);
+
+ after = local_clock();
+
/*
* Give the governor an opportunity to reflect on the outcome
*/
cpuidle_reflect(dev, entered_state);
+
+ trace_idle_prediction(now, after, (after - now) / 1000, dev->last_residency);
}
exit_idle: