pmdomain/cpuidle: Add trace_prints about selected state for s2idle Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
diff --git a/drivers/pmdomain/governor.c b/drivers/pmdomain/governor.c index 96737ab..c36024c 100644 --- a/drivers/pmdomain/governor.c +++ b/drivers/pmdomain/governor.c
@@ -443,11 +443,15 @@ static bool cpu_system_power_down_ok(struct dev_pm_domain *pd) if (latency_ns <= constraint_ns) { genpd->state_idx = state_idx; + trace_printk("Last CPU%d enters with state=%d\n", + smp_processor_id(), state_idx); return true; } state_idx--; } + trace_printk("Last CPU%d failed to find a stated\n", smp_processor_id()); + return false; }
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c index a83be0c..4ef2bdb 100644 --- a/kernel/sched/idle.c +++ b/kernel/sched/idle.c
@@ -194,6 +194,10 @@ static void cpuidle_idle_call(bool stop_tick) } if (cpuidle_not_available(drv, dev)) { + if (idle_should_enter_s2idle()) + trace_printk("s2idle: CPU%d enter with default idle call\n", + smp_processor_id()); + idle_call_stop_or_retain_tick(stop_tick); default_idle_call(); @@ -217,17 +221,28 @@ static void cpuidle_idle_call(bool stop_tick) max_latency_ns = cpu_wakeup_latency_qos_limit() * NSEC_PER_USEC; + trace_printk("s2idle-enter: max_latency_ns=%llu\n", max_latency_ns); + entered_state = call_cpuidle_s2idle(drv, dev, max_latency_ns); + + trace_printk("s2idle-exit: state=%d\n", entered_state); + if (entered_state > 0) goto exit_idle; } else { max_latency_ns = dev->forced_idle_latency_limit_ns; } + + trace_printk("s2idle-failed/forced: max_latency_ns=%llu\n", max_latency_ns); + tick_nohz_idle_stop_tick(); next_state = cpuidle_find_deepest_state(drv, dev, max_latency_ns); + + trace_printk("s2idle-failed/forced: using state=%d\n", next_state); + call_cpuidle(drv, dev, next_state); } else if (drv->state_count > 1) { /*