From: "Rafael J. Wysocki" <rjw@rjwysocki.net>
To: Linux PM <linux-pm@vger.kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Ulf Hansson <ulf.hansson@linaro.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Alan Stern <stern@rowland.harvard.edu>
Subject: [PATCH] PM / runtime: Drop children check from __pm_runtime_set_status()
Date: Sun, 12 Nov 2017 01:27:30 +0100 [thread overview]
Message-ID: <1713438.irjm9MTSvo@aspire.rjw.lan> (raw)
From: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
The check for "active" children in __pm_runtime_set_status(), when
trying to set the parent device status to "suspended", doesn't
really make sense, because in fact it is not invalid to set the
status of a device with runtime PM disabled to "suspended" in any
case. It is invalid to enable runtime PM for a device with its
status set to "suspended" while its child_count reference counter
is nonzero, but the check in __pm_runtime_set_status() doesn't
really cover that situation.
For this reason, drop the children check from __pm_runtime_set_status()
and add a check against child_count reference counters of "suspended"
devices to pm_runtime_enable().
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
drivers/base/power/runtime.c | 30 ++++++++++--------------------
1 file changed, 10 insertions(+), 20 deletions(-)
Index: linux-pm/drivers/base/power/runtime.c
===================================================================
--- linux-pm.orig/drivers/base/power/runtime.c
+++ linux-pm/drivers/base/power/runtime.c
@@ -1101,29 +1101,13 @@ int __pm_runtime_set_status(struct devic
goto out;
}
- if (dev->power.runtime_status == status)
+ if (dev->power.runtime_status == status || !parent)
goto out_set;
if (status == RPM_SUSPENDED) {
- /*
- * It is invalid to suspend a device with an active child,
- * unless it has been set to ignore its children.
- */
- if (!dev->power.ignore_children &&
- atomic_read(&dev->power.child_count)) {
- dev_err(dev, "runtime PM trying to suspend device but active child\n");
- error = -EBUSY;
- goto out;
- }
-
- if (parent) {
- atomic_add_unless(&parent->power.child_count, -1, 0);
- notify_parent = !parent->power.ignore_children;
- }
- goto out_set;
- }
-
- if (parent) {
+ atomic_add_unless(&parent->power.child_count, -1, 0);
+ notify_parent = !parent->power.ignore_children;
+ } else {
spin_lock_nested(&parent->power.lock, SINGLE_DEPTH_NESTING);
/*
@@ -1307,6 +1291,12 @@ void pm_runtime_enable(struct device *de
else
dev_warn(dev, "Unbalanced %s!\n", __func__);
+ WARN(dev->power.runtime_status == RPM_SUSPENDED &&
+ !dev->power.ignore_children &&
+ atomic_read(&dev->power.child_count) > 0,
+ "Enabling runtime PM for inactive device (%s) with active children\n",
+ dev_name(dev));
+
spin_unlock_irqrestore(&dev->power.lock, flags);
}
EXPORT_SYMBOL_GPL(pm_runtime_enable);
next reply other threads:[~2017-11-12 0:27 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-12 0:27 Rafael J. Wysocki [this message]
2017-11-13 13:26 ` Ulf Hansson
2017-11-13 21:50 ` Rafael J. Wysocki
2017-11-13 21:58 ` Rafael J. Wysocki
2017-11-14 9:13 ` Ulf Hansson
2017-11-14 9:56 ` Ulf Hansson
2017-11-14 21:44 ` Rafael J. Wysocki
2017-11-15 7:22 ` Ulf Hansson
2017-11-16 9:22 ` Johan Hovold
2017-11-16 13:57 ` Rafael J. Wysocki
2017-11-28 10:58 ` Geert Uytterhoeven
2017-11-28 12:48 ` Yoshihiro Shimoda
2017-11-28 15:06 ` Alan Stern
2017-11-29 8:21 ` Yoshihiro Shimoda
2017-11-28 17:22 ` Ulf Hansson
2017-11-29 8:21 ` Yoshihiro Shimoda
2017-11-29 9:24 ` Ulf Hansson
2017-11-29 9:43 ` Geert Uytterhoeven
2017-11-29 9:59 ` Ulf Hansson
2017-11-29 14:09 ` Geert Uytterhoeven
2017-11-30 12:51 ` Yoshihiro Shimoda
2017-12-01 9:22 ` Ulf Hansson
2017-12-01 11:03 ` Yoshihiro Shimoda
2017-12-01 11:54 ` Yoshihiro Shimoda
2017-12-04 10:41 ` Ulf Hansson
2017-12-05 3:23 ` Yoshihiro Shimoda
2017-12-05 15:03 ` Alan Stern
2017-12-05 15:23 ` Rafael J. Wysocki
2017-12-05 15:48 ` Ulf Hansson
2017-11-28 14:17 ` Rafael J. Wysocki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1713438.irjm9MTSvo@aspire.rjw.lan \
--to=rjw@rjwysocki.net \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=stern@rowland.harvard.edu \
--cc=ulf.hansson@linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®