aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2016-06-17 06:27:52 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2016-06-28 20:15:19 -0400
commit7eb231c337e00735d4b553ed4ae7f9441598f028 (patch)
tree30c8c564e5f23f698598608c2bf007188b7a2f27
parent122a22377a3d8cc11cf18b20db13b02d5aad1a38 (diff)
PM / Domains: Convert pm_genpd_init() to return an error code
The are already cases when pm_genpd_init() can fail. Currently we hide the failures instead of propagating an error code, which is a better method. Moreover, to prepare for future changes like moving away from using a fixed array-size of the struct genpd_power_state, to instead dynamically allocate data for it, the pm_genpd_init() API needs to be able to return an error code, as allocation can fail. Current users of the pm_genpd_init() is thus requested to start dealing with error codes. In the transition phase, users will have to live with only error messages being printed to log. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Acked-by: Kevin Hilman <khilman@baylibre.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/base/power/domain.c10
-rw-r--r--include/linux/pm_domain.h9
2 files changed, 12 insertions, 7 deletions
diff --git a/drivers/base/power/domain.c b/drivers/base/power/domain.c
index 9193aacf7b1b..a1f2aff33997 100644
--- a/drivers/base/power/domain.c
+++ b/drivers/base/power/domain.c
@@ -1258,12 +1258,14 @@ EXPORT_SYMBOL_GPL(pm_genpd_remove_subdomain);
1258 * @genpd: PM domain object to initialize. 1258 * @genpd: PM domain object to initialize.
1259 * @gov: PM domain governor to associate with the domain (may be NULL). 1259 * @gov: PM domain governor to associate with the domain (may be NULL).
1260 * @is_off: Initial value of the domain's power_is_off field. 1260 * @is_off: Initial value of the domain's power_is_off field.
1261 *
1262 * Returns 0 on successful initialization, else a negative error code.
1261 */ 1263 */
1262void pm_genpd_init(struct generic_pm_domain *genpd, 1264int pm_genpd_init(struct generic_pm_domain *genpd,
1263 struct dev_power_governor *gov, bool is_off) 1265 struct dev_power_governor *gov, bool is_off)
1264{ 1266{
1265 if (IS_ERR_OR_NULL(genpd)) 1267 if (IS_ERR_OR_NULL(genpd))
1266 return; 1268 return -EINVAL;
1267 1269
1268 INIT_LIST_HEAD(&genpd->master_links); 1270 INIT_LIST_HEAD(&genpd->master_links);
1269 INIT_LIST_HEAD(&genpd->slave_links); 1271 INIT_LIST_HEAD(&genpd->slave_links);
@@ -1321,6 +1323,8 @@ void pm_genpd_init(struct generic_pm_domain *genpd,
1321 mutex_lock(&gpd_list_lock); 1323 mutex_lock(&gpd_list_lock);
1322 list_add(&genpd->gpd_list_node, &gpd_list); 1324 list_add(&genpd->gpd_list_node, &gpd_list);
1323 mutex_unlock(&gpd_list_lock); 1325 mutex_unlock(&gpd_list_lock);
1326
1327 return 0;
1324} 1328}
1325EXPORT_SYMBOL_GPL(pm_genpd_init); 1329EXPORT_SYMBOL_GPL(pm_genpd_init);
1326 1330
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h
index dd5b0447d572..31fec858088c 100644
--- a/include/linux/pm_domain.h
+++ b/include/linux/pm_domain.h
@@ -127,8 +127,8 @@ extern int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
127 struct generic_pm_domain *new_subdomain); 127 struct generic_pm_domain *new_subdomain);
128extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, 128extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
129 struct generic_pm_domain *target); 129 struct generic_pm_domain *target);
130extern void pm_genpd_init(struct generic_pm_domain *genpd, 130extern int pm_genpd_init(struct generic_pm_domain *genpd,
131 struct dev_power_governor *gov, bool is_off); 131 struct dev_power_governor *gov, bool is_off);
132 132
133extern struct dev_power_governor simple_qos_governor; 133extern struct dev_power_governor simple_qos_governor;
134extern struct dev_power_governor pm_domain_always_on_gov; 134extern struct dev_power_governor pm_domain_always_on_gov;
@@ -163,9 +163,10 @@ static inline int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
163{ 163{
164 return -ENOSYS; 164 return -ENOSYS;
165} 165}
166static inline void pm_genpd_init(struct generic_pm_domain *genpd, 166static inline int pm_genpd_init(struct generic_pm_domain *genpd,
167 struct dev_power_governor *gov, bool is_off) 167 struct dev_power_governor *gov, bool is_off)
168{ 168{
169 return -ENOSYS;
169} 170}
170#endif 171#endif
171 172