Export cpufreq_dbs_data_release() and set .kobj_type.release statically in the ondemand and conservative governors so their gov_attr_set kobjects have a valid release callback statically initialized, matching cpufreq_governor_dbs. Remove the redundant runtime assignment in cpufreq_dbs_governor_init().
This prepares for annotating struct kobj_type::release with __must_init. Signed-off-by: Ian Rogers <[email protected]> --- drivers/cpufreq/cpufreq_conservative.c | 5 ++++- drivers/cpufreq/cpufreq_governor.c | 4 ++-- drivers/cpufreq/cpufreq_governor.h | 1 + drivers/cpufreq/cpufreq_ondemand.c | 5 ++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/cpufreq/cpufreq_conservative.c b/drivers/cpufreq/cpufreq_conservative.c index 02bfd46543e9..146a2353b1a2 100644 --- a/drivers/cpufreq/cpufreq_conservative.c +++ b/drivers/cpufreq/cpufreq_conservative.c @@ -318,7 +318,10 @@ static void cs_limits(struct cpufreq_policy *policy) static struct dbs_governor cs_governor = { .gov = CPUFREQ_DBS_GOVERNOR_INITIALIZER("conservative"), - .kobj_type = { .default_groups = cs_groups }, + .kobj_type = { + .release = cpufreq_dbs_data_release, + .default_groups = cs_groups, + }, .gov_dbs_update = cs_dbs_update, .alloc = cs_alloc, .free = cs_free, diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c index f3bd3dbe7c41..f8b5aca09b6b 100644 --- a/drivers/cpufreq/cpufreq_governor.c +++ b/drivers/cpufreq/cpufreq_governor.c @@ -419,7 +419,7 @@ static void free_policy_dbs_info(struct policy_dbs_info *policy_dbs, gov->free(policy_dbs); } -static void cpufreq_dbs_data_release(struct kobject *kobj) +void cpufreq_dbs_data_release(struct kobject *kobj) { struct dbs_data *dbs_data = to_dbs_data(to_gov_attr_set(kobj)); struct dbs_governor *gov = dbs_data->gov; @@ -427,6 +427,7 @@ static void cpufreq_dbs_data_release(struct kobject *kobj) gov->exit(dbs_data); kfree(dbs_data); } +EXPORT_SYMBOL_GPL(cpufreq_dbs_data_release); int cpufreq_dbs_governor_init(struct cpufreq_policy *policy) { @@ -488,7 +489,6 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy) policy->governor_data = policy_dbs; gov->kobj_type.sysfs_ops = &governor_sysfs_ops; - gov->kobj_type.release = cpufreq_dbs_data_release; ret = kobject_init_and_add(&dbs_data->attr_set.kobj, &gov->kobj_type, get_governor_parent_kobj(policy), "%s", gov->gov.name); diff --git a/drivers/cpufreq/cpufreq_governor.h b/drivers/cpufreq/cpufreq_governor.h index 806d8fb4dff1..1026712bb79b 100644 --- a/drivers/cpufreq/cpufreq_governor.h +++ b/drivers/cpufreq/cpufreq_governor.h @@ -150,6 +150,7 @@ static inline struct dbs_governor *dbs_governor_of(struct cpufreq_policy *policy } /* Governor callback routines */ +void cpufreq_dbs_data_release(struct kobject *kobj); int cpufreq_dbs_governor_init(struct cpufreq_policy *policy); void cpufreq_dbs_governor_exit(struct cpufreq_policy *policy); int cpufreq_dbs_governor_start(struct cpufreq_policy *policy); diff --git a/drivers/cpufreq/cpufreq_ondemand.c b/drivers/cpufreq/cpufreq_ondemand.c index 9942dbb38dae..7386d043c665 100644 --- a/drivers/cpufreq/cpufreq_ondemand.c +++ b/drivers/cpufreq/cpufreq_ondemand.c @@ -374,7 +374,10 @@ static struct od_ops od_ops = { static struct dbs_governor od_dbs_gov = { .gov = CPUFREQ_DBS_GOVERNOR_INITIALIZER("ondemand"), - .kobj_type = { .default_groups = od_groups }, + .kobj_type = { + .release = cpufreq_dbs_data_release, + .default_groups = od_groups, + }, .gov_dbs_update = od_dbs_update, .alloc = od_alloc, .free = od_free, -- 2.56.0.313.g2479322e68-goog
