On Tue, Oct 27, 2026 at 11:39 PM Ian Rogers <[email protected]> wrote:
>
> 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]>
Do you want stuff to be picked up by maintainers, or do you want to
route it yourself?
> ---
> 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
>
>