]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
PM / Domains: Convert to dev_to_genpd_safe() in genpd_syscore_switch()
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 16 Oct 2019 14:16:49 +0000 (16:16 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Wed, 13 Nov 2019 10:44:15 +0000 (11:44 +0100)
The intent with walking the gpd_list via calling genpd_present() from
genpd_syscore_switch(), is to make sure the dev->pm_domain pointer belongs
to a registered genpd. However, as a genpd can't be removed if there is a
device attached to it, let's convert to use the quicker dev_to_genpd_safe()
instead.

Due to the above change, this allows us to clean up genpd_present() and
move it inside CONFIG_PM_GENERIC_DOMAINS_OF, so let's do that as well.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/power/domain.c

index 2adf0661fa3ee017ad786ebcf4d0b0acf68c1f23..8e5725b11ee8c2dbaed6f9f0835fc369a3867199 100644 (file)
@@ -929,24 +929,6 @@ static int __init genpd_power_off_unused(void)
 }
 late_initcall(genpd_power_off_unused);
 
-#if defined(CONFIG_PM_SLEEP) || defined(CONFIG_PM_GENERIC_DOMAINS_OF)
-
-static bool genpd_present(const struct generic_pm_domain *genpd)
-{
-       const struct generic_pm_domain *gpd;
-
-       if (IS_ERR_OR_NULL(genpd))
-               return false;
-
-       list_for_each_entry(gpd, &gpd_list, gpd_list_node)
-               if (gpd == genpd)
-                       return true;
-
-       return false;
-}
-
-#endif
-
 #ifdef CONFIG_PM_SLEEP
 
 /**
@@ -1361,8 +1343,8 @@ static void genpd_syscore_switch(struct device *dev, bool suspend)
 {
        struct generic_pm_domain *genpd;
 
-       genpd = dev_to_genpd(dev);
-       if (!genpd_present(genpd))
+       genpd = dev_to_genpd_safe(dev);
+       if (!genpd)
                return;
 
        if (suspend) {
@@ -2028,6 +2010,16 @@ static int genpd_add_provider(struct device_node *np, genpd_xlate_t xlate,
        return 0;
 }
 
+static bool genpd_present(const struct generic_pm_domain *genpd)
+{
+       const struct generic_pm_domain *gpd;
+
+       list_for_each_entry(gpd, &gpd_list, gpd_list_node)
+               if (gpd == genpd)
+                       return true;
+       return false;
+}
+
 /**
  * of_genpd_add_provider_simple() - Register a simple PM domain provider
  * @np: Device node pointer associated with the PM domain provider.