* [PATCH v2 1/8] cpufreq: Introduce macros for cpufreq_frequency_table iteration
@ 2014-04-15 22:25 Stratos Karafotis
2014-04-15 23:47 ` Randy Dunlap
0 siblings, 1 reply; 2+ messages in thread
From: Stratos Karafotis @ 2014-04-15 22:25 UTC (permalink / raw)
To: Rafael J. Wysocki, Viresh Kumar
Cc: Randy Dunlap, David S. Miller, Hans-Christian Egtvedt,
Linus Walleij, Dirk Brandewie, linux-doc, cpufreq@vger.kernel.org,
linux-pm, LKML
Many cpufreq drivers need to iterate over the cpufreq_frequency_table
for various tasks.
This patch introduces two macros which can be used for iteration over
cpufreq_frequency_table keeping a common coding style across drivers:
- cpufreq_for_each_entry: iterate over each entry of the table
- cpufreq_for_each_valid_entry: iterate over each entry that contains
a valid frequency.
It should have no functional changes.
Signed-off-by: Stratos Karafotis <stratosk@semaphore.gr>
---
Documentation/cpu-freq/cpu-drivers.txt | 16 ++++++++++++++++
drivers/cpufreq/cpufreq.c | 11 +++++++++++
include/linux/cpufreq.h | 21 +++++++++++++++++++++
3 files changed, 48 insertions(+)
diff --git a/Documentation/cpu-freq/cpu-drivers.txt b/Documentation/cpu-freq/cpu-drivers.txt
index 48da5fd..2c9156a 100644
--- a/Documentation/cpu-freq/cpu-drivers.txt
+++ b/Documentation/cpu-freq/cpu-drivers.txt
@@ -228,3 +228,19 @@ is the corresponding frequency table helper for the ->target
stage. Just pass the values to this function, and the unsigned int
index returns the number of the frequency table entry which contains
the frequency the CPU shall be set to.
+
+The following macros can be used as iterators over cpufreq_frequency_table:
+cpufreq_for_each_entry(pos, table) - iterates over all entries of frequency
+table.
+cpufreq-for_each_valid_entry(pos, table) - iterates over all entries,
+excluding CPUFREQ_ENTRY_INVALID frequencies.
+Use arguments "pos" - a cpufreq_frequency_table * as a loop cursor and
+"table" - the cpufreq_frequency_table * you want to iterate over.
+For example:
+
+ struct cpufreq_frequency_table *pos, *driver_freq_table;
+
+ cpufreq_for_each_entry(pos, driver_freq_table) {
+ /* Do something with pos */
+ pos->frequency = ...
+ }
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index abda660..a517da9 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -237,6 +237,17 @@ void cpufreq_cpu_put(struct cpufreq_policy *policy)
}
EXPORT_SYMBOL_GPL(cpufreq_cpu_put);
+bool cpufreq_next_valid(struct cpufreq_frequency_table **pos)
+{
+ while ((*pos)->frequency != CPUFREQ_TABLE_END)
+ if ((*pos)->frequency != CPUFREQ_ENTRY_INVALID)
+ return true;
+ else
+ (*pos)++;
+ return false;
+}
+EXPORT_SYMBOL_GPL(cpufreq_next_valid);
+
/*********************************************************************
* EXTERNALLY AFFECTING FREQUENCY CHANGES *
*********************************************************************/
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index 5ae5100..4f913b5 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -468,6 +468,27 @@ struct cpufreq_frequency_table {
* order */
};
+bool cpufreq_next_valid(struct cpufreq_frequency_table **pos);
+
+/*
+ * cpufreq_for_each_entry - iterate over a cpufreq_frequency_table
+ * @pos: the cpufreq_frequency_table * to use as a loop cursor.
+ * @table: the cpufreq_frequency_table * to iterate over.
+ */
+
+#define cpufreq_for_each_entry(pos, table) \
+ for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++)
+
+/*
+ * cpufreq_for_each_valid_entry - iterate over a cpufreq_frequency_table
+ * exluding CPUFREQ_ENTRY_INVALID frequencies.
+ * @pos: the cpufreq_frequency_table * to use as a loop cursor.
+ * @table: the cpufreq_frequency_table * to iterate over.
+ */
+
+#define cpufreq_for_each_valid_entry(pos, table) \
+ for (pos = table; cpufreq_next_valid(&pos); pos++)
+
int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
struct cpufreq_frequency_table *table);
--
1.9.0
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH v2 1/8] cpufreq: Introduce macros for cpufreq_frequency_table iteration
2014-04-15 22:25 [PATCH v2 1/8] cpufreq: Introduce macros for cpufreq_frequency_table iteration Stratos Karafotis
@ 2014-04-15 23:47 ` Randy Dunlap
0 siblings, 0 replies; 2+ messages in thread
From: Randy Dunlap @ 2014-04-15 23:47 UTC (permalink / raw)
To: Stratos Karafotis, Rafael J. Wysocki, Viresh Kumar
Cc: David S. Miller, Hans-Christian Egtvedt, Linus Walleij,
Dirk Brandewie, linux-doc, cpufreq@vger.kernel.org, linux-pm,
LKML
On 04/15/2014 03:25 PM, Stratos Karafotis wrote:
> Many cpufreq drivers need to iterate over the cpufreq_frequency_table
> for various tasks.
>
> This patch introduces two macros which can be used for iteration over
> cpufreq_frequency_table keeping a common coding style across drivers:
>
> - cpufreq_for_each_entry: iterate over each entry of the table
> - cpufreq_for_each_valid_entry: iterate over each entry that contains
> a valid frequency.
>
> It should have no functional changes.
>
> Signed-off-by: Stratos Karafotis <stratosk@semaphore.gr>
> ---
> Documentation/cpu-freq/cpu-drivers.txt | 16 ++++++++++++++++
> drivers/cpufreq/cpufreq.c | 11 +++++++++++
> include/linux/cpufreq.h | 21 +++++++++++++++++++++
> 3 files changed, 48 insertions(+)
>
> diff --git a/Documentation/cpu-freq/cpu-drivers.txt b/Documentation/cpu-freq/cpu-drivers.txt
> index 48da5fd..2c9156a 100644
> --- a/Documentation/cpu-freq/cpu-drivers.txt
> +++ b/Documentation/cpu-freq/cpu-drivers.txt
> @@ -228,3 +228,19 @@ is the corresponding frequency table helper for the ->target
> stage. Just pass the values to this function, and the unsigned int
> index returns the number of the frequency table entry which contains
> the frequency the CPU shall be set to.
> +
> +The following macros can be used as iterators over cpufreq_frequency_table:
<insert blank line>
> +cpufreq_for_each_entry(pos, table) - iterates over all entries of frequency
> +table.
<insert blank line>
> +cpufreq-for_each_valid_entry(pos, table) - iterates over all entries,
> +excluding CPUFREQ_ENTRY_INVALID frequencies.
> +Use arguments "pos" - a cpufreq_frequency_table * as a loop cursor and
> +"table" - the cpufreq_frequency_table * you want to iterate over.
<insert blank line>
> +For example:
> +
> + struct cpufreq_frequency_table *pos, *driver_freq_table;
> +
> + cpufreq_for_each_entry(pos, driver_freq_table) {
> + /* Do something with pos */
> + pos->frequency = ...
> + }
> diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
> index 5ae5100..4f913b5 100644
> --- a/include/linux/cpufreq.h
> +++ b/include/linux/cpufreq.h
> @@ -468,6 +468,27 @@ struct cpufreq_frequency_table {
> * order */
> };
>
> +bool cpufreq_next_valid(struct cpufreq_frequency_table **pos);
> +
> +/*
> + * cpufreq_for_each_entry - iterate over a cpufreq_frequency_table
> + * @pos: the cpufreq_frequency_table * to use as a loop cursor.
> + * @table: the cpufreq_frequency_table * to iterate over.
> + */
> +
> +#define cpufreq_for_each_entry(pos, table) \
> + for (pos = table; pos->frequency != CPUFREQ_TABLE_END; pos++)
> +
> +/*
> + * cpufreq_for_each_valid_entry - iterate over a cpufreq_frequency_table
> + * exluding CPUFREQ_ENTRY_INVALID frequencies.
excluding
> + * @pos: the cpufreq_frequency_table * to use as a loop cursor.
> + * @table: the cpufreq_frequency_table * to iterate over.
> + */
> +
> +#define cpufreq_for_each_valid_entry(pos, table) \
> + for (pos = table; cpufreq_next_valid(&pos); pos++)
> +
> int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
> struct cpufreq_frequency_table *table);
>
>
--
~Randy
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2014-04-15 23:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-15 22:25 [PATCH v2 1/8] cpufreq: Introduce macros for cpufreq_frequency_table iteration Stratos Karafotis
2014-04-15 23:47 ` Randy Dunlap
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).