diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2016-06-17 06:27:52 -0400 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2016-06-28 20:15:19 -0400 |
commit | 7eb231c337e00735d4b553ed4ae7f9441598f028 (patch) | |
tree | 30c8c564e5f23f698598608c2bf007188b7a2f27 | |
parent | 122a22377a3d8cc11cf18b20db13b02d5aad1a38 (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.c | 10 | ||||
-rw-r--r-- | include/linux/pm_domain.h | 9 |
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 | */ |
1262 | void pm_genpd_init(struct generic_pm_domain *genpd, | 1264 | int 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 | } |
1325 | EXPORT_SYMBOL_GPL(pm_genpd_init); | 1329 | EXPORT_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); |
128 | extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, | 128 | extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd, |
129 | struct generic_pm_domain *target); | 129 | struct generic_pm_domain *target); |
130 | extern void pm_genpd_init(struct generic_pm_domain *genpd, | 130 | extern 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 | ||
133 | extern struct dev_power_governor simple_qos_governor; | 133 | extern struct dev_power_governor simple_qos_governor; |
134 | extern struct dev_power_governor pm_domain_always_on_gov; | 134 | extern 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 | } |
166 | static inline void pm_genpd_init(struct generic_pm_domain *genpd, | 166 | static 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 | ||