summaryrefslogtreecommitdiff
path: root/drivers/pmdomain/governor.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pmdomain/governor.c')
-rw-r--r--drivers/pmdomain/governor.c20
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)