Message ID | 20220317133419.3901736-2-Pierre.Gondois@arm.com |
---|---|
State | Superseded |
Headers | show |
Series | Enable EAS for CPPC/ACPI based systems | expand |
On 2022-03-17 13:34, Pierre Gondois wrote: > cppc_cpufreq_get_cpu_data() allocates a new struct cppc_cpudata > for the input CPU at each call. > > To search the struct associated with a cpu without allocating > a new one, add cppc_cpufreq_search_cpu_data(). > Also add an early prototype. > > This will be used in a later patch, when generating artificial > performance states to register an artificial Energy Model in the > cppc_cpufreq driver and enable the Energy Aware Scheduler for ACPI > based systems. > > Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com> > --- > drivers/cpufreq/cppc_cpufreq.c | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/drivers/cpufreq/cppc_cpufreq.c > b/drivers/cpufreq/cppc_cpufreq.c > index 82d370ae6a4a..8f950fe72765 100644 > --- a/drivers/cpufreq/cppc_cpufreq.c > +++ b/drivers/cpufreq/cppc_cpufreq.c > @@ -41,6 +41,8 @@ > */ > static LIST_HEAD(cpu_data_list); > > +static struct cppc_cpudata *cppc_cpufreq_search_cpu_data(unsigned int > cpu); > + > static bool boost_supported; > > struct cppc_workaround_oem_info { > @@ -479,6 +481,19 @@ static void cppc_cpufreq_put_cpu_data(struct > cpufreq_policy *policy) > policy->driver_data = NULL; > } > > +static inline struct cppc_cpudata * Why the inline? This is hardly performance critical, and if it is, you want something better than iterating over a list. > +cppc_cpufreq_search_cpu_data(unsigned int cpu) > +{ > + struct cppc_cpudata *iter, *tmp; > + > + list_for_each_entry_safe(iter, tmp, &cpu_data_list, node) { > + if (cpumask_test_cpu(cpu, iter->shared_cpu_map)) > + return iter; > + } > + > + return NULL; > +} > + > static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy) > { > unsigned int cpu = policy->cpu; Thanks, M.
diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c index 82d370ae6a4a..8f950fe72765 100644 --- a/drivers/cpufreq/cppc_cpufreq.c +++ b/drivers/cpufreq/cppc_cpufreq.c @@ -41,6 +41,8 @@ */ static LIST_HEAD(cpu_data_list); +static struct cppc_cpudata *cppc_cpufreq_search_cpu_data(unsigned int cpu); + static bool boost_supported; struct cppc_workaround_oem_info { @@ -479,6 +481,19 @@ static void cppc_cpufreq_put_cpu_data(struct cpufreq_policy *policy) policy->driver_data = NULL; } +static inline struct cppc_cpudata * +cppc_cpufreq_search_cpu_data(unsigned int cpu) +{ + struct cppc_cpudata *iter, *tmp; + + list_for_each_entry_safe(iter, tmp, &cpu_data_list, node) { + if (cpumask_test_cpu(cpu, iter->shared_cpu_map)) + return iter; + } + + return NULL; +} + static int cppc_cpufreq_cpu_init(struct cpufreq_policy *policy) { unsigned int cpu = policy->cpu;
cppc_cpufreq_get_cpu_data() allocates a new struct cppc_cpudata for the input CPU at each call. To search the struct associated with a cpu without allocating a new one, add cppc_cpufreq_search_cpu_data(). Also add an early prototype. This will be used in a later patch, when generating artificial performance states to register an artificial Energy Model in the cppc_cpufreq driver and enable the Energy Aware Scheduler for ACPI based systems. Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com> --- drivers/cpufreq/cppc_cpufreq.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)