Commit 71723f95 authored by Linus Walleij's avatar Linus Walleij Committed by Rafael J. Wysocki

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: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 4c2e07c6
...@@ -1045,10 +1045,14 @@ int __pm_runtime_set_status(struct device *dev, unsigned int status) ...@@ -1045,10 +1045,14 @@ int __pm_runtime_set_status(struct device *dev, unsigned int status)
*/ */
if (!parent->power.disable_depth if (!parent->power.disable_depth
&& !parent->power.ignore_children && !parent->power.ignore_children
&& parent->power.runtime_status != RPM_ACTIVE) && parent->power.runtime_status != RPM_ACTIVE) {
dev_err(dev, "runtime PM trying to activate child device %s but parent (%s) is not active\n",
dev_name(dev),
dev_name(parent));
error = -EBUSY; error = -EBUSY;
else if (dev->power.runtime_status == RPM_SUSPENDED) } else if (dev->power.runtime_status == RPM_SUSPENDED) {
atomic_inc(&parent->power.child_count); atomic_inc(&parent->power.child_count);
}
spin_unlock(&parent->power.lock); spin_unlock(&parent->power.lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment