On Wed, Oct 28, 2026 at 4:36 PM Ian Rogers <[email protected]> wrote:
>
> On Wed, Oct 28, 2026 at 4:39 AM Rafael J. Wysocki (Intel)
> <[email protected]> wrote:
> >
> > 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?
>
> Hi Rafael,
>
> Just a quick note: I agree with Zhongqiu's feedback and the commit
> message needs a fix.
>
> Regarding merging the patches, the issue with maintainers picking up
> fixes is that the series will break the clang/llvm build without them.
> So the maintainers need to either merge the patches (and the series be
> rebased on top of them) or merge the series as a unit. Perhaps since
> the patches align, merge conflicts won't happen, so maintainers
> merging and landing the series is okay. I don't have the experience to
> know.

I'd expect the driver core to pick up the series as a whole then, so
please feel free to add

Acked-by: Rafael J. Wysocki (Intel) <[email protected]> # cpufreq

to the next version of this patch.

Thanks!

> > > ---
> > >  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
> > >
> > >
>

Reply via email to