summaryrefslogtreecommitdiffstats
path: root/drivers/base
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2016-06-20 05:14:26 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-06-27 18:40:30 -0400
commit71723f95463d284004bd0afe1825e6790a0c90d0 (patch)
tree6543dea066773786c85fed006c42cb2baa20a35c /drivers/base
parent4c2e07c6a29e0129e975727b9f57eede813eea85 (diff)
PM / runtime: print error when activating a child to unactive parent
The code currently silently bails out with -EBUSY if you try to activate a child to an inactive parent. This typically happens when you have a runtime suspended parent and runtime resume your child, but forgot to set .ignore_children on the parent to true with pm_suspend_ignore_children(dev). Silently ignoring this error is not good as it gives rise to other strange behaviour like double-resume of devices after silently bailing out of the .runtime_resume() callback. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/base')
-rw-r--r--drivers/base/power/runtime.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index b74690418504..e7ee8293055b 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -1045,10 +1045,14 @@ int __pm_runtime_set_status(struct device *dev, unsigned int status)
1045 */ 1045 */
1046 if (!parent->power.disable_depth 1046 if (!parent->power.disable_depth
1047 && !parent->power.ignore_children 1047 && !parent->power.ignore_children
1048 && parent->power.runtime_status != RPM_ACTIVE) 1048 && parent->power.runtime_status != RPM_ACTIVE) {
1049 dev_err(dev, "runtime PM trying to activate child device %s but parent (%s) is not active\n",
1050 dev_name(dev),
1051 dev_name(parent));
1049 error = -EBUSY; 1052 error = -EBUSY;
1050 else if (dev->power.runtime_status == RPM_SUSPENDED) 1053 } else if (dev->power.runtime_status == RPM_SUSPENDED) {
1051 atomic_inc(&parent->power.child_count); 1054 atomic_inc(&parent->power.child_count);
1055 }
1052 1056
1053 spin_unlock(&parent->power.lock); 1057 spin_unlock(&parent->power.lock);
1054 1058