summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorRafael J. Wysocki <rjw@sisk.pl>2012-08-13 14:00:25 +0200
committerRafael J. Wysocki <rjw@sisk.pl>2012-09-04 01:36:05 +0200
commitfeb70af0e3ac6817327be70b47731039ea135dbc (patch)
tree7df6ab174688d8bcc637af0d7a8fc7beb6a1e2aa /drivers
parent3cb6f10a4d925ec21f414bc30a8aded2830963e5 (diff)
downloadlinux-stable-feb70af0e3ac6817327be70b47731039ea135dbc.tar.gz
linux-stable-feb70af0e3ac6817327be70b47731039ea135dbc.tar.bz2
linux-stable-feb70af0e3ac6817327be70b47731039ea135dbc.zip
PM: Do not use the syscore flag for runtime PM
The syscore device PM flag used to mark the devices (belonging to PM domains) that should never be turned off, except for the system core (syscore) suspend/hibernation and resume stages, need not be accessed by the runtime PM core functions, because all of the devices it is set for need to be marked as "irq safe" anyway and are protected from being turned off by runtime PM by ensuring that their usage counters are always set. For this reason, make the syscore flag system-wide PM-specific and simplify the code used for manipulating it, because it need not acquire the device's power.lock any more. Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/base/power/common.c15
-rw-r--r--drivers/base/power/domain.c2
-rw-r--r--drivers/base/power/runtime.c2
3 files changed, 2 insertions, 17 deletions
diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c
index cf7a85134730..39c32529b833 100644
--- a/drivers/base/power/common.c
+++ b/drivers/base/power/common.c
@@ -83,18 +83,3 @@ int dev_pm_put_subsys_data(struct device *dev)
return ret;
}
EXPORT_SYMBOL_GPL(dev_pm_put_subsys_data);
-
-/**
- * dev_pm_syscore_device - Set/unset the given device's power.syscore flag.
- * @dev: Device whose flag is to be modified.
- * @val: New value of the flag.
- */
-void dev_pm_syscore_device(struct device *dev, bool val)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&dev->power.lock, flags);
- dev->power.syscore = val;
- spin_unlock_irqrestore(&dev->power.lock, flags);
-}
-EXPORT_SYMBOL_GPL(dev_pm_syscore_device);
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index d7e71b5b080e..5f4606f13be6 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -442,7 +442,7 @@ static int pm_genpd_poweroff(struct generic_pm_domain *genpd)
not_suspended = 0;
list_for_each_entry(pdd, &genpd->dev_list, list_node)
if (pdd->dev->driver && (!pm_runtime_suspended(pdd->dev)
- || pdd->dev->power.irq_safe || pdd->dev->power.syscore))
+ || pdd->dev->power.irq_safe))
not_suspended++;
if (not_suspended > genpd->in_progress)
diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index bd1de3980919..7d9c1cb1c39a 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -134,7 +134,7 @@ static int rpm_check_suspend_allowed(struct device *dev)
if (dev->power.runtime_error)
retval = -EINVAL;
- else if (dev->power.disable_depth > 0 || dev->power.syscore)
+ else if (dev->power.disable_depth > 0)
retval = -EACCES;
else if (atomic_read(&dev->power.usage_count) > 0)
retval = -EAGAIN;