From: Rafael J. Wysocki Date: Thu, 14 Jul 2011 18:59:20 +0000 (+0200) Subject: PM / Domains: Take .power_off() error code into account X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=d28054020f97c7c9f15327a53945f0f40ffc5d7a;p=deliverable%2Flinux.git PM / Domains: Take .power_off() error code into account Currently pm_genpd_poweroff() discards error codes returned by the PM domain's .power_off() callback, because it's safer to always regard the domain as inaccessible to drivers after a failing .power_off(). Still, there are situations in which the low-level code may want to indicate that it doesn't want to power off the domain, so allow it to do that by returning -EBUSY from .power_off(). Signed-off-by: Rafael J. Wysocki Acked-by: Magnus Damm --- diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c index 00ed4f32a4de..be8714aa9dd6 100644 --- a/drivers/base/power/domain.c +++ b/drivers/base/power/domain.c @@ -312,8 +312,16 @@ static int pm_genpd_poweroff(struct generic_pm_domain *genpd) } } - if (genpd->power_off) - genpd->power_off(genpd); + if (genpd->power_off) { + ret = genpd->power_off(genpd); + if (ret == -EBUSY) { + genpd_set_active(genpd); + if (parent) + genpd_release_lock(parent); + + goto out; + } + } genpd->status = GPD_STATE_POWER_OFF;