diff options
Diffstat (limited to 'drivers/pmdomain/governor.c')
| -rw-r--r-- | drivers/pmdomain/governor.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/pmdomain/governor.c b/drivers/pmdomain/governor.c index 05e68680f34b..96737abbb496 100644 --- a/drivers/pmdomain/governor.c +++ b/drivers/pmdomain/governor.c @@ -408,15 +408,21 @@ static bool cpu_power_down_ok(struct dev_pm_domain *pd) if ((idle_duration_ns >= (genpd->states[i].residency_ns + genpd->states[i].power_off_latency_ns)) && (global_constraint >= (genpd->states[i].power_on_latency_ns + - genpd->states[i].power_off_latency_ns))) { - genpd->state_idx = i; - genpd->gd->last_enter = now; - genpd->gd->reflect_residency = true; - return true; - } + genpd->states[i].power_off_latency_ns))) + break; + } while (--i >= 0); - return false; + if (i < 0) + return false; + + if (cpus_peek_for_pending_ipi(genpd->cpus)) + return false; + + genpd->state_idx = i; + genpd->gd->last_enter = now; + genpd->gd->reflect_residency = true; + return true; } static bool cpu_system_power_down_ok(struct dev_pm_domain *pd) |
