From: "Rafael J. Wysocki" <rjw@sisk.pl>
To: Linux PM mailing list <linux-pm@lists.linux-foundation.org>
Cc: Tejun Heo <tj@kernel.org>, Alan Stern <stern@rowland.harvard.edu>,
Greg KH <greg@kroah.com>, LKML <linux-kernel@vger.kernel.org>,
Magnus Damm <magnus.damm@gmail.com>,
Kevin Hilman <khilman@ti.com>,
linux-scsi@vger.kernel.org
Subject: [PATCH 2/3] PM / Runtime: Return special error code if runtime PM is disabled
Date: Sun, 26 Jun 2011 00:55:52 +0200 [thread overview]
Message-ID: <201106260055.52859.rjw@sisk.pl> (raw)
In-Reply-To: <201106260054.20578.rjw@sisk.pl>
From: Rafael J. Wysocki <rjw@sisk.pl>
Some callers of pm_runtime_get_sync() and other runtime PM helper
functions, scsi_autopm_get_host() and scsi_autopm_get_device() in
particular, need to distinguish error codes returned when runtime PM
is disabled (i.e. power.disable_depth is nonzero for the given
device) from error codes returned in other situations. For this
reason, make the runtime PM helper functions return -EACCES when
power.disable_depth is nonzero and ensure that this error code
won't be returned by them in any other circumstances. Modify
scsi_autopm_get_host() and scsi_autopm_get_device() to check the
error code returned by pm_runtime_get_sync() and ignore -EACCES.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
---
Documentation/power/runtime_pm.txt | 6 ++++--
drivers/base/power/runtime.c | 9 +++++----
drivers/scsi/scsi_pm.c | 8 ++++----
3 files changed, 13 insertions(+), 10 deletions(-)
Index: linux-2.6/drivers/base/power/runtime.c
===================================================================
--- linux-2.6.orig/drivers/base/power/runtime.c
+++ linux-2.6/drivers/base/power/runtime.c
@@ -135,8 +135,9 @@ static int rpm_check_suspend_allowed(str
if (dev->power.runtime_error)
retval = -EINVAL;
- else if (atomic_read(&dev->power.usage_count) > 0
- || dev->power.disable_depth > 0)
+ else if (dev->power.disable_depth > 0)
+ retval = -EACCES;
+ else if (atomic_read(&dev->power.usage_count) > 0)
retval = -EAGAIN;
else if (!pm_children_suspended(dev))
retval = -EBUSY;
@@ -262,7 +263,7 @@ static int rpm_callback(int (*cb)(struct
spin_lock_irq(&dev->power.lock);
}
dev->power.runtime_error = retval;
- return retval;
+ return retval != -EACCES ? retval : -EIO;
}
/**
@@ -458,7 +459,7 @@ static int rpm_resume(struct device *dev
if (dev->power.runtime_error)
retval = -EINVAL;
else if (dev->power.disable_depth > 0)
- retval = -EAGAIN;
+ retval = -EACCES;
if (retval)
goto out;
Index: linux-2.6/drivers/scsi/scsi_pm.c
===================================================================
--- linux-2.6.orig/drivers/scsi/scsi_pm.c
+++ linux-2.6/drivers/scsi/scsi_pm.c
@@ -144,9 +144,9 @@ int scsi_autopm_get_device(struct scsi_d
int err;
err = pm_runtime_get_sync(&sdev->sdev_gendev);
- if (err < 0)
+ if (err < 0 && err !=-EACCES)
pm_runtime_put_sync(&sdev->sdev_gendev);
- else if (err > 0)
+ else
err = 0;
return err;
}
@@ -173,9 +173,9 @@ int scsi_autopm_get_host(struct Scsi_Hos
int err;
err = pm_runtime_get_sync(&shost->shost_gendev);
- if (err < 0)
+ if (err < 0 && err !=-EACCES)
pm_runtime_put_sync(&shost->shost_gendev);
- else if (err > 0)
+ else
err = 0;
return err;
}
Index: linux-2.6/Documentation/power/runtime_pm.txt
===================================================================
--- linux-2.6.orig/Documentation/power/runtime_pm.txt
+++ linux-2.6/Documentation/power/runtime_pm.txt
@@ -291,7 +291,8 @@ drivers/base/power/runtime.c and include
- execute the subsystem-level suspend callback for the device; returns 0 on
success, 1 if the device's run-time PM status was already 'suspended', or
error code on failure, where -EAGAIN or -EBUSY means it is safe to attempt
- to suspend the device again in future
+ to suspend the device again in future and -EACCES means that disable_depth
+ is different from 0
int pm_runtime_autosuspend(struct device *dev);
- same as pm_runtime_suspend() except that the autosuspend delay is taken
@@ -304,7 +305,8 @@ drivers/base/power/runtime.c and include
success, 1 if the device's run-time PM status was already 'active' or
error code on failure, where -EAGAIN means it may be safe to attempt to
resume the device again in future, but 'power.runtime_error' should be
- checked additionally
+ checked additionally, and -EACCES means that disable_depth is different
+ from 0
int pm_request_idle(struct device *dev);
- submit a request to execute the subsystem-level idle callback for the
next prev parent reply other threads:[~2011-06-25 22:56 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-25 22:54 [PATCH 0/3] PM: Fix up interactions between system suspend/resume and runtime PM Rafael J. Wysocki
2011-06-25 22:55 ` [PATCH 1/3] PM / Runtime: Update documentation of interactions with system sleep Rafael J. Wysocki
2011-06-25 22:58 ` Jesper Juhl
2011-06-26 3:01 ` Alan Stern
2011-06-26 20:12 ` Rafael J. Wysocki
2011-06-25 22:55 ` Rafael J. Wysocki [this message]
2011-06-25 22:56 ` [PATCH 3/3] PM: Limit race conditions between runtime PM and " Rafael J. Wysocki
2011-06-26 2:57 ` Alan Stern
2011-06-26 20:21 ` Rafael J. Wysocki
2011-06-28 15:56 ` Ming Lei
2011-06-28 21:42 ` Rafael J. Wysocki
2011-06-29 14:11 ` Alan Stern
2011-06-29 19:35 ` Rafael J. Wysocki
2011-07-01 16:22 ` Kevin Hilman
2011-07-01 19:50 ` Rafael J. Wysocki
2011-06-29 21:29 ` [PATCH 0/6 v2] PM: Fix up interactions between system suspend/resume and runtime PM Rafael J. Wysocki
2011-06-29 21:31 ` [PATCH 1/6 v2] PM / Runtime: Update documentation of interactions with system sleep Rafael J. Wysocki
2011-06-29 21:32 ` [PATCH 2/6 v2] PM / Runtime: Return special error code if runtime PM is disabled Rafael J. Wysocki
2011-06-29 21:33 ` [PATCH 3/6 v2] PCI / PM: Detect early wakeup in pci_pm_prepare() Rafael J. Wysocki
2011-06-29 21:34 ` [PATCH 4/6 v2] PM: Limit race conditions between runtime PM and system sleep (v2) Rafael J. Wysocki
2011-10-27 13:54 ` Linus Walleij
2011-10-27 20:06 ` Rafael J. Wysocki
2011-10-28 20:00 ` Linus Walleij
2011-11-02 19:14 ` Greg KH
2011-11-02 20:06 ` Linus Walleij
2011-11-02 20:11 ` Greg KH
2011-11-02 21:00 ` Linus Walleij
2011-11-02 21:17 ` Greg KH
2011-11-03 0:28 ` Rafael J. Wysocki
2011-11-03 1:31 ` Greg KH
2011-06-29 21:35 ` [PATCH 5/6 v2] PM / Runtime: Improve documentation of enable, disable and barrier Rafael J. Wysocki
2011-06-29 21:35 ` [PATCH 6/6 v2] PM / Runtime: Replace "run-time" with "runtime" in documentation 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=201106260055.52859.rjw@sisk.pl \
--to=rjw@sisk.pl \
--cc=greg@kroah.com \
--cc=khilman@ti.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=linux-scsi@vger.kernel.org \
--cc=magnus.damm@gmail.com \
--cc=stern@rowland.harvard.edu \
--cc=tj@kernel.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
Powered by JetHome