Merge "drivercore: Avoid adding devices without pm_ops to dpm list"

This commit is contained in:
Linux Build Service Account 2017-03-21 05:00:47 -07:00 committed by Gerrit - the friendly Code Review server
commit 4232ab8b56
2 changed files with 19 additions and 1 deletions

View file

@ -1116,7 +1116,13 @@ int device_add(struct device *dev)
error = dpm_sysfs_add(dev); error = dpm_sysfs_add(dev);
if (error) if (error)
goto DPMError; goto DPMError;
if ((dev->pm_domain) || (dev->type && dev->type->pm)
|| (dev->class && (dev->class->pm || dev->class->resume))
|| (dev->bus && (dev->bus->pm || dev->bus->resume)) ||
(dev->driver && dev->driver->pm)) {
device_pm_add(dev); device_pm_add(dev);
}
if (MAJOR(dev->devt)) { if (MAJOR(dev->devt)) {
error = device_create_file(dev, &dev_attr_dev); error = device_create_file(dev, &dev_attr_dev);

View file

@ -162,6 +162,12 @@ void device_pm_move_before(struct device *deva, struct device *devb)
pr_debug("PM: Moving %s:%s before %s:%s\n", pr_debug("PM: Moving %s:%s before %s:%s\n",
deva->bus ? deva->bus->name : "No Bus", dev_name(deva), deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
devb->bus ? devb->bus->name : "No Bus", dev_name(devb)); devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
if (!((devb->pm_domain) || (devb->type && devb->type->pm)
|| (devb->class && (devb->class->pm || devb->class->resume))
|| (devb->bus && (devb->bus->pm || devb->bus->resume)) ||
(devb->driver && devb->driver->pm))) {
device_pm_add(devb);
}
/* Delete deva from dpm_list and reinsert before devb. */ /* Delete deva from dpm_list and reinsert before devb. */
list_move_tail(&deva->power.entry, &devb->power.entry); list_move_tail(&deva->power.entry, &devb->power.entry);
} }
@ -176,6 +182,12 @@ void device_pm_move_after(struct device *deva, struct device *devb)
pr_debug("PM: Moving %s:%s after %s:%s\n", pr_debug("PM: Moving %s:%s after %s:%s\n",
deva->bus ? deva->bus->name : "No Bus", dev_name(deva), deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
devb->bus ? devb->bus->name : "No Bus", dev_name(devb)); devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
if (!((devb->pm_domain) || (devb->type && devb->type->pm)
|| (devb->class && (devb->class->pm || devb->class->resume))
|| (devb->bus && (devb->bus->pm || devb->bus->resume)) ||
(devb->driver && devb->driver->pm))) {
device_pm_add(devb);
}
/* Delete deva from dpm_list and reinsert after devb. */ /* Delete deva from dpm_list and reinsert after devb. */
list_move(&deva->power.entry, &devb->power.entry); list_move(&deva->power.entry, &devb->power.entry);
} }