Messages in this thread | | | From | "Rafael J. Wysocki" <> | Date | Mon, 3 Apr 2023 17:28:20 +0200 | Subject | Re: [PATCH] cpufreq: drivers with target_index() must set freq_table |
| |
On Mon, Apr 3, 2023 at 6:09 AM Viresh Kumar <viresh.kumar@linaro.org> wrote: > > Since the cpufreq core directly uses freq_table, for cpufreq drivers > that set their target_index() callback, make it mandatory for them to > set the same. > > Since this is set per policy and normally from policy->init(), do this > from cpufreq_table_validate_and_sort() which gets called right after > ->init(). > > Reported-by: Yajun Deng <yajun.deng@linux.dev> > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> > --- > drivers/cpufreq/cpufreq.c | 5 +++++ > drivers/cpufreq/freq_table.c | 9 ++++++++- > 2 files changed, 13 insertions(+), 1 deletion(-) > > diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c > index 6d8fd3b8dcb5..09131c54703f 100644 > --- a/drivers/cpufreq/cpufreq.c > +++ b/drivers/cpufreq/cpufreq.c > @@ -73,6 +73,11 @@ static inline bool has_target(void) > return cpufreq_driver->target_index || cpufreq_driver->target; > } > > +bool has_target_index(void) > +{ > + return !!cpufreq_driver->target_index; > +}
This needs to go into a header (as a static inline) or the prototype of it needs to go into a header.
> + > /* internal prototypes */ > static unsigned int __cpufreq_get(struct cpufreq_policy *policy); > static int cpufreq_init_governor(struct cpufreq_policy *policy); > diff --git a/drivers/cpufreq/freq_table.c b/drivers/cpufreq/freq_table.c > index 90bfc27ed1ba..c6fc5b0ea91f 100644 > --- a/drivers/cpufreq/freq_table.c > +++ b/drivers/cpufreq/freq_table.c > @@ -10,6 +10,8 @@ > #include <linux/cpufreq.h> > #include <linux/module.h> > > +bool has_target_index(void); > + > /********************************************************************* > * FREQUENCY TABLE HELPERS * > *********************************************************************/ > @@ -355,8 +357,13 @@ int cpufreq_table_validate_and_sort(struct cpufreq_policy *policy) > { > int ret; > > - if (!policy->freq_table) > + if (!policy->freq_table) { > + /* Freq table must be passed by drivers with target_index() */ > + if (has_target_index()) > + return -EINVAL; > + > return 0; > + } > > ret = cpufreq_frequency_table_cpuinfo(policy, policy->freq_table); > if (ret) > -- > 2.31.1.272.g89b43f80a514 >
| |