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>
This commit is contained in:
parent
122a22377a
commit
7eb231c337
2 changed files with 12 additions and 7 deletions
|
@ -1258,12 +1258,14 @@ EXPORT_SYMBOL_GPL(pm_genpd_remove_subdomain);
|
||||||
* @genpd: PM domain object to initialize.
|
* @genpd: PM domain object to initialize.
|
||||||
* @gov: PM domain governor to associate with the domain (may be NULL).
|
* @gov: PM domain governor to associate with the domain (may be NULL).
|
||||||
* @is_off: Initial value of the domain's power_is_off field.
|
* @is_off: Initial value of the domain's power_is_off field.
|
||||||
|
*
|
||||||
|
* Returns 0 on successful initialization, else a negative error code.
|
||||||
*/
|
*/
|
||||||
void pm_genpd_init(struct generic_pm_domain *genpd,
|
int pm_genpd_init(struct generic_pm_domain *genpd,
|
||||||
struct dev_power_governor *gov, bool is_off)
|
struct dev_power_governor *gov, bool is_off)
|
||||||
{
|
{
|
||||||
if (IS_ERR_OR_NULL(genpd))
|
if (IS_ERR_OR_NULL(genpd))
|
||||||
return;
|
return -EINVAL;
|
||||||
|
|
||||||
INIT_LIST_HEAD(&genpd->master_links);
|
INIT_LIST_HEAD(&genpd->master_links);
|
||||||
INIT_LIST_HEAD(&genpd->slave_links);
|
INIT_LIST_HEAD(&genpd->slave_links);
|
||||||
|
@ -1321,6 +1323,8 @@ void pm_genpd_init(struct generic_pm_domain *genpd,
|
||||||
mutex_lock(&gpd_list_lock);
|
mutex_lock(&gpd_list_lock);
|
||||||
list_add(&genpd->gpd_list_node, &gpd_list);
|
list_add(&genpd->gpd_list_node, &gpd_list);
|
||||||
mutex_unlock(&gpd_list_lock);
|
mutex_unlock(&gpd_list_lock);
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pm_genpd_init);
|
EXPORT_SYMBOL_GPL(pm_genpd_init);
|
||||||
|
|
||||||
|
|
|
@ -127,8 +127,8 @@ extern int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
|
||||||
struct generic_pm_domain *new_subdomain);
|
struct generic_pm_domain *new_subdomain);
|
||||||
extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
|
extern int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
|
||||||
struct generic_pm_domain *target);
|
struct generic_pm_domain *target);
|
||||||
extern void pm_genpd_init(struct generic_pm_domain *genpd,
|
extern int pm_genpd_init(struct generic_pm_domain *genpd,
|
||||||
struct dev_power_governor *gov, bool is_off);
|
struct dev_power_governor *gov, bool is_off);
|
||||||
|
|
||||||
extern struct dev_power_governor simple_qos_governor;
|
extern struct dev_power_governor simple_qos_governor;
|
||||||
extern struct dev_power_governor pm_domain_always_on_gov;
|
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,
|
||||||
{
|
{
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
static inline void pm_genpd_init(struct generic_pm_domain *genpd,
|
static inline int pm_genpd_init(struct generic_pm_domain *genpd,
|
||||||
struct dev_power_governor *gov, bool is_off)
|
struct dev_power_governor *gov, bool is_off)
|
||||||
{
|
{
|
||||||
|
return -ENOSYS;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue