aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2018-01-09 04:03:39 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2018-01-10 07:13:56 -0500
commitc23bd3877bc21d830fa650570fc1a88bea82ecd2 (patch)
treef076c4ae68cca001db0402078dc6cc1db4eba01a
parent02e45646d53bdb38bfb47b83765778d3ecb4d3b3 (diff)
PM / core: Re-structure code for clearing the direct_complete flag
To make the code more consistent, let's clear the parent's direct_complete flag along with clearing it for suppliers, instead of as currently, when propagating the wakeup_path flag to parents. While changing this, let's take the opportunity to rename the affected internal functions, to make them self-explanatory. Like this: dpm_clear_suppliers_direct_complete -> dpm_clear_superiors_direct_complete dpm_propagate_to_parent -> dpm_propagate_wakeup_to_parent Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/base/power/main.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index ebcec7e677ba..720e36ec84ac 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -1660,7 +1660,7 @@ static int legacy_suspend(struct device *dev, pm_message_t state,
1660 return error; 1660 return error;
1661} 1661}
1662 1662
1663static void dpm_propagate_to_parent(struct device *dev) 1663static void dpm_propagate_wakeup_to_parent(struct device *dev)
1664{ 1664{
1665 struct device *parent = dev->parent; 1665 struct device *parent = dev->parent;
1666 1666
@@ -1669,18 +1669,23 @@ static void dpm_propagate_to_parent(struct device *dev)
1669 1669
1670 spin_lock_irq(&parent->power.lock); 1670 spin_lock_irq(&parent->power.lock);
1671 1671
1672 parent->power.direct_complete = false;
1673 if (dev->power.wakeup_path && !parent->power.ignore_children) 1672 if (dev->power.wakeup_path && !parent->power.ignore_children)
1674 parent->power.wakeup_path = true; 1673 parent->power.wakeup_path = true;
1675 1674
1676 spin_unlock_irq(&parent->power.lock); 1675 spin_unlock_irq(&parent->power.lock);
1677} 1676}
1678 1677
1679static void dpm_clear_suppliers_direct_complete(struct device *dev) 1678static void dpm_clear_superiors_direct_complete(struct device *dev)
1680{ 1679{
1681 struct device_link *link; 1680 struct device_link *link;
1682 int idx; 1681 int idx;
1683 1682
1683 if (dev->parent) {
1684 spin_lock_irq(&dev->parent->power.lock);
1685 dev->parent->power.direct_complete = false;
1686 spin_unlock_irq(&dev->parent->power.lock);
1687 }
1688
1684 idx = device_links_read_lock(); 1689 idx = device_links_read_lock();
1685 1690
1686 list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) { 1691 list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) {
@@ -1791,8 +1796,8 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)
1791 if (device_may_wakeup(dev)) 1796 if (device_may_wakeup(dev))
1792 dev->power.wakeup_path = true; 1797 dev->power.wakeup_path = true;
1793 1798
1794 dpm_propagate_to_parent(dev); 1799 dpm_propagate_wakeup_to_parent(dev);
1795 dpm_clear_suppliers_direct_complete(dev); 1800 dpm_clear_superiors_direct_complete(dev);
1796 } 1801 }
1797 1802
1798 device_unlock(dev); 1803 device_unlock(dev);