diff mbox series

[V6,02/15] cpufreq: Add cpufreq_table_len()

Message ID 867ba9728179ba21ff8f8aca97d416b72ccd63d9.1736248242.git.viresh.kumar@linaro.org
State New
Headers show
Series Rust bindings for cpufreq and OPP core + sample driver | expand

Commit Message

Viresh Kumar Jan. 7, 2025, 11:21 a.m. UTC
Add a function to calculate number of entries in the cpufreq table. This
will be used by the Rust implementation.

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 include/linux/cpufreq.h | 11 +++++++++++
 1 file changed, 11 insertions(+)

Comments

Viresh Kumar Jan. 8, 2025, 11:12 a.m. UTC | #1
On 07-01-25, 12:59, Greg KH wrote:
> On Tue, Jan 07, 2025 at 04:51:35PM +0530, Viresh Kumar wrote:
> > Add a function to calculate number of entries in the cpufreq table. This
> > will be used by the Rust implementation.
> 
> Again, why is Rust unique here?  Why wouldn't the C code also need this?

How about this:

    cpufreq: Add cpufreq_table_len()

    The last entry of a cpufreq table is marked by setting the frequency
    field to a special value: CPUFREQ_TABLE_END. The C code manages to
    traverse the table by checking the frequency field, until it reaches
    CPUFREQ_TABLE_END.

    The Rust cpufreq bindings though will need to know the length of the
    cpufreq table in advance, for example to check against an invalid index
    value.

    Provide a helper to calculate number of entries in the cpufreq table.
    will be used by the Rust implementation.

> > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
> > ---
> >  include/linux/cpufreq.h | 11 +++++++++++
> >  1 file changed, 11 insertions(+)
> > 
> > diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
> > index 7fe0981a7e46..6b882ff4dc24 100644
> > --- a/include/linux/cpufreq.h
> > +++ b/include/linux/cpufreq.h
> > @@ -783,6 +783,17 @@ bool cpufreq_boost_enabled(void);
> >  int cpufreq_enable_boost_support(void);
> >  bool policy_has_boost_freq(struct cpufreq_policy *policy);
> >  
> > +static inline unsigned int cpufreq_table_len(struct cpufreq_frequency_table *freq_table)
> > +{
> > +	struct cpufreq_frequency_table *pos;
> > +	unsigned int count = 0;
> > +
> > +	cpufreq_for_each_entry(pos, freq_table)
> > +		count++;
> 
> No locking is needed?

No, the cpufreq table is implemented as an array and is never altered once
created.
diff mbox series

Patch

diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 7fe0981a7e46..6b882ff4dc24 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -783,6 +783,17 @@  bool cpufreq_boost_enabled(void);
 int cpufreq_enable_boost_support(void);
 bool policy_has_boost_freq(struct cpufreq_policy *policy);
 
+static inline unsigned int cpufreq_table_len(struct cpufreq_frequency_table *freq_table)
+{
+	struct cpufreq_frequency_table *pos;
+	unsigned int count = 0;
+
+	cpufreq_for_each_entry(pos, freq_table)
+		count++;
+
+	return count;
+}
+
 /* Find lowest freq at or above target in a table in ascending order */
 static inline int cpufreq_table_find_index_al(struct cpufreq_policy *policy,
 					      unsigned int target_freq,