summaryrefslogtreecommitdiffstats
path: root/drivers/base/power
diff options
context:
space:
mode:
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-01-30 12:54:29 +0100
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-02-03 19:10:37 +0100
commite79aee49bcf9ad005b3f2f4cf68b17dc2c22d9c2 (patch)
tree15ccff24ec3b0f789c2c0da116551e6759516c94 /drivers/base/power
parentACPI / LPSS: set PM domain via helper setter (diff)
downloadlinux-e79aee49bcf9ad005b3f2f4cf68b17dc2c22d9c2.tar.xz
linux-e79aee49bcf9ad005b3f2f4cf68b17dc2c22d9c2.zip
PM: Avoid false-positive warnings in dev_pm_domain_set()
There is a WARN_ON() in dev_pm_domain_set() that triggers on attempts to set the pm_domain pointer for devices with a driver bound. However, that WARN_ON() triggers on attempts to clear the pointer too and the test it uses is based on checking the device's p->knode_driver pointer which still is set when the device bus type's/driver's ->remove callback has been executed. This leads to false-positive warnings when bus type code calls dev_pm_domain_set() to clear the pm_domain pointer after invoking the driver's ->remove() callback. To avoid those false-positives, make dev_pm_domain_set() check if the pointer passed to it is NULL and skip the warning in that case. Fixes: 989561de9b51 (PM / Domains: add setter for dev.pm_domain) Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Tested-by: Sinan Kaya <okaya@codeaurora.org> Tested-by: Steven Rostedt <rostedt@goodmis.org> Acked-by: Ulf Hansson <ulf.hansson@linaro.org>
Diffstat (limited to 'drivers/base/power')
-rw-r--r--drivers/base/power/common.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/base/power/common.c b/drivers/base/power/common.c
index 93ed14cc2252..f6a9ad52cbbf 100644
--- a/drivers/base/power/common.c
+++ b/drivers/base/power/common.c
@@ -146,7 +146,7 @@ void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd)
if (dev->pm_domain == pd)
return;
- WARN(device_is_bound(dev),
+ WARN(pd && device_is_bound(dev),
"PM domains can only be changed for unbound devices\n");
dev->pm_domain = pd;
device_pm_check_callbacks(dev);