Skip to contentSkip to conversation

cpufreq: move frequency table helpers to extra module

PATCH In review Dominik Brodowski 4 participants 7 messages Feb 13, 2003 – Feb 15, 2003 CPU frequency scaling framework

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 cpufreq: move frequency table helpers to extra module

The CPU frequency table helpers can easily be modularized -- especially as they are not needed on all architectures, or for all drivers.

 arch/i386/Kconfig            |   20 +++-
 arch/sparc64/Kconfig         |    7 +
 drivers/cpufreq/Makefile     |    2
 drivers/cpufreq/freq_table.c |  201 +++++++++++++++++++++++++++++++++++++++++++
 include/linux/cpufreq.h      |    3
 kernel/cpufreq.c             |  188 ----------------------------------------
 6 files changed, 228 insertions(+), 194 deletions(-)
arch/i386/Kconfig +15 -5
diff -ruN linux-original/arch/i386/Kconfig linux/arch/i386/Kconfig
@@ -983,9 +983,19 @@
 
 	  If in doubt, say N.
 
+config CPU_FREQ_TABLE
+       tristate "CPU frequency table helpers"
+       depends on CPU_FREQ
+       default y
+       help
+         Many CPUFreq drivers use these helpers, so only say N here if
+	 the CPUFreq driver of your choice doesn't need these helpers.
+
+	 If in doubt, say Y.
+
 config X86_ACPI_CPUFREQ
 	tristate "ACPI Processor P-States driver"
-	depends on CPU_FREQ && ACPI_PROCESSOR
+	depends on CPU_FREQ && ACPI_PROCESSOR && CPU_FREQ_TABLE
 	help
 	  This driver adds a CPUFreq driver which utilizes the ACPI
 	  Processor Performance States.
@@ -996,7 +1006,7 @@
 
 config X86_POWERNOW_K6
 	tristate "AMD Mobile K6-2/K6-3 PowerNow!"
-	depends on CPU_FREQ
+	depends on CPU_FREQ && CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for mobile AMD K6-2+ and mobile
 	  AMD K6-3+ processors.
@@ -1007,7 +1017,7 @@
 
 config ELAN_CPUFREQ
 	tristate "AMD Elan"
-	depends on CPU_FREQ && MELAN
+	depends on CPU_FREQ && MELAN && CPU_FREQ_TABLE
 	---help---
 	  This adds the CPUFreq driver for AMD Elan SC400 and SC410
 	  processors.
@@ -1034,7 +1044,7 @@
 
 config X86_SPEEDSTEP
 	tristate "Intel Speedstep"
-	depends on CPU_FREQ
+	depends on CPU_FREQ && CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for certain mobile Intel Pentium III
 	  (Coppermine), all mobile Intel Pentium III-M (Tulatin) and all
@@ -1046,7 +1056,7 @@
 
 config X86_P4_CLOCKMOD
 	tristate "Intel Pentium 4 clock modulation"
-	depends on CPU_FREQ
+	depends on CPU_FREQ && CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for Intel Pentium 4 / XEON
 	  processors.
arch/sparc64/Kconfig +6 -1
diff -ruN linux-original/arch/sparc64/Kconfig linux/arch/sparc64/Kconfig
@@ -162,9 +162,14 @@
 	  
 	  If in doubt, say N.
 
+config CPU_FREQ_TABLE
+       tristate
+       default y
+
+
 config US3_FREQ
 	tristate "UltraSPARC-III CPU Frequency driver"
-	depends on CPU_FREQ
+	depends on CPU_FREQ && CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for UltraSPARC-III processors.
 
drivers/Makefile +1 -0
diff -ruN linux-original/drivers/Makefile linux/drivers/Makefile
@@ -45,3 +45,4 @@
 obj-$(CONFIG_ISDN_BOOL)		+= isdn/
 obj-$(CONFIG_MCA)		+= mca/
 obj-$(CONFIG_EISA)		+= eisa/
+obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
drivers/cpufreq/Makefile +2 -0
diff -ruN linux-original/drivers/cpufreq/Makefile linux/drivers/cpufreq/Makefile
@@ -0,0 +1,2 @@
+#CPUfreq governors and cross-arch helpers
+obj-$(CONFIG_CPU_FREQ_TABLE)		+= freq_table.o
drivers/cpufreq/freq_table.c +201 -0

201 lines not on this page · raw message

include/linux/cpufreq.h +3 -0
diff -ruN linux-original/include/linux/cpufreq.h linux/include/linux/cpufreq.h
@@ -297,6 +297,7 @@
 
 #endif /* CONFIG_CPU_FREQ_24_API */
 
+#if defined(CONFIG_CPU_FREQ_TABLE) || defined(CONFIG_CPU_FREQ_TABLE_MODULE)
 /*********************************************************************
  *                     FREQUENCY TABLE HELPERS                       *
  *********************************************************************/
@@ -326,4 +327,6 @@
 				   unsigned int relation,
 				   unsigned int *index);
 
+#endif /* CONFIG_CPU_FREQ_TABLE */
+
 #endif /* _LINUX_CPUFREQ_H */
kernel/cpufreq.c +0 -188

191 lines not on this page · raw message

#1 lore raw
Quoted 3 lines · Dominik Brodowski

The CPU frequency table helpers can easily be modularized -- especially as they are not needed on all architectures, or for all drivers.

As most of the x86 drivers have been converted now, it looks like it'd make more sense to conditionalise this on architecture, and move the remaining x86 drivers over to the helpers (longrun/longhaul).

It just strikes me as silly that we have a config option that when disabled could end up showing no chip drivers when the conversion is complete.

Dave

Signature · 2 lines
| Dave Jones.        http://www.codemonkey.org.uk
| SuSE Labs
#2 lore raw
Quoted 8 lines · Dave Jones
Quoted 3 lines · Dominik Brodowski

The CPU frequency table helpers can easily be modularized -- especially as they are not needed on all architectures, or for all drivers.

As most of the x86 drivers have been converted now, it looks like it'd make more sense to conditionalise this on architecture, and move the remaining x86 drivers over to the helpers (longrun/longhaul).

Longhaul yes, Longrun no. On longrun you can't set the speed to a specific frequency[*], only to a _frequency range_. So the frequency table helpers aren't needed there. Also, for gx-suspmod, which allows really fine-grained setting of frequencies, the frequency table helpers don't make sense.

Quoted 3 lines

It just strikes me as silly that we have a config option that when disabled could end up showing no chip drivers when the conversion is complete.

So, even when the conversion is complete, there are two drivers which can be compiled. Additionally, some users (or distros!) might prefer modularizing this.

Dominik

[*] you can set policy->max = policy->min, but that really doesn't make sense on longrun.

#3 lore raw
In reply to Dominik Brodowski

Hi,

Quoted 7 lines · Dominik Brodowski
arch/i386/Kconfig +7 -0
+config CPU_FREQ_TABLE
+       tristate "CPU frequency table helpers"
+       depends on CPU_FREQ
+       default y
+       help
+         Many CPUFreq drivers use these helpers, so only say N here if
+	 the CPUFreq driver of your choice doesn't need these helpers.

arch/i386/Kconfig line 1001

Quoted 10 lines
arch/i386/Kconfig +4 -1
+
+	 If in doubt, say Y.
+
 config X86_ACPI_CPUFREQ
 	tristate "ACPI Processor P-States driver"
-	depends on CPU_FREQ && ACPI_PROCESSOR
+	depends on CPU_FREQ && ACPI_PROCESSOR && CPU_FREQ_TABLE
 	help
 	  This driver adds a CPUFreq driver which utilizes the ACPI
 	  Processor Performance States.

If CPU_FREQ_TABLE itself depends on CPU_FREQ, then X86_ACPI_CPUFREQ automatically depends on CPU_FREQ too, so you can remove CPU_FREQ from the dependency list.
You can also put X86_ACPI_CPUFREQ and all following options, which depend on CPU_FREQ_TABLE, within an "if CPU_FREQ_TABLE" ... "endif" block.

bye, Roman

#4 lore raw

PATCH 1/1 cpufreq: move frequency table helpers to extra module

The CPU frequency table helpers can easily be modularized -- especially as they are not needed on all architectures, or for all drivers (even on x86 -- see longrun and gx-suspmod). Thanks to Roman Zippel and Dave Jones for their feedback.

 arch/i386/Kconfig            |   20 +++-
 arch/sparc64/Kconfig         |    7 +
 drivers/cpufreq/Makefile     |    2
 drivers/cpufreq/freq_table.c |  201 +++++++++++++++++++++++++++++++++++++++++++
 include/linux/cpufreq.h      |    3
 kernel/cpufreq.c             |  188 ----------------------------------------
 6 files changed, 228 insertions(+), 194 deletions(-)
arch/i386/Kconfig +15 -5
diff -ruN linux-original/arch/i386/Kconfig linux/arch/i386/Kconfig
@@ -983,9 +983,19 @@
 
 	  If in doubt, say N.
 
+config CPU_FREQ_TABLE
+       tristate "CPU frequency table helpers"
+       depends on CPU_FREQ
+       default y
+       help
+         Many CPUFreq drivers use these helpers, so only say N here if
+	 the CPUFreq driver of your choice doesn't need these helpers.
+
+	 If in doubt, say Y.
+
 config X86_ACPI_CPUFREQ
 	tristate "ACPI Processor P-States driver"
-	depends on CPU_FREQ && ACPI_PROCESSOR
+	depends on CPU_FREQ_TABLE && ACPI_PROCESSOR
 	help
 	  This driver adds a CPUFreq driver which utilizes the ACPI
 	  Processor Performance States.
@@ -996,7 +1006,7 @@
 
 config X86_POWERNOW_K6
 	tristate "AMD Mobile K6-2/K6-3 PowerNow!"
-	depends on CPU_FREQ
+	depends on CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for mobile AMD K6-2+ and mobile
 	  AMD K6-3+ processors.
@@ -1007,7 +1017,7 @@
 
 config ELAN_CPUFREQ
 	tristate "AMD Elan"
-	depends on CPU_FREQ && MELAN
+	depends on CPU_FREQ_TABLE && MELAN
 	---help---
 	  This adds the CPUFreq driver for AMD Elan SC400 and SC410
 	  processors.
@@ -1034,7 +1044,7 @@
 
 config X86_SPEEDSTEP
 	tristate "Intel Speedstep"
-	depends on CPU_FREQ
+	depends on CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for certain mobile Intel Pentium III
 	  (Coppermine), all mobile Intel Pentium III-M (Tulatin) and all
@@ -1046,7 +1056,7 @@
 
 config X86_P4_CLOCKMOD
 	tristate "Intel Pentium 4 clock modulation"
-	depends on CPU_FREQ
+	depends on CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for Intel Pentium 4 / XEON
 	  processors.
arch/sparc64/Kconfig +6 -1
diff -ruN linux-original/arch/sparc64/Kconfig linux/arch/sparc64/Kconfig
@@ -162,9 +162,14 @@
 	  
 	  If in doubt, say N.
 
+config CPU_FREQ_TABLE
+       tristate
+       default y
+
+
 config US3_FREQ
 	tristate "UltraSPARC-III CPU Frequency driver"
-	depends on CPU_FREQ
+	depends on CPU_FREQ_TABLE
 	help
 	  This adds the CPUFreq driver for UltraSPARC-III processors.
 
drivers/Makefile +1 -0
diff -ruN linux-original/drivers/Makefile linux/drivers/Makefile
@@ -45,3 +45,4 @@
 obj-$(CONFIG_ISDN_BOOL)		+= isdn/
 obj-$(CONFIG_MCA)		+= mca/
 obj-$(CONFIG_EISA)		+= eisa/
+obj-$(CONFIG_CPU_FREQ)		+= cpufreq/
drivers/cpufreq/Makefile +2 -0
diff -ruN linux-original/drivers/cpufreq/Makefile linux/drivers/cpufreq/Makefile
@@ -0,0 +1,2 @@
+#CPUfreq governors and cross-arch helpers
+obj-$(CONFIG_CPU_FREQ_TABLE)		+= freq_table.o
drivers/cpufreq/freq_table.c +201 -0

201 lines not on this page · raw message

include/linux/cpufreq.h +3 -0
diff -ruN linux-original/include/linux/cpufreq.h linux/include/linux/cpufreq.h
@@ -297,6 +297,7 @@
 
 #endif /* CONFIG_CPU_FREQ_24_API */
 
+#if defined(CONFIG_CPU_FREQ_TABLE) || defined(CONFIG_CPU_FREQ_TABLE_MODULE)
 /*********************************************************************
  *                     FREQUENCY TABLE HELPERS                       *
  *********************************************************************/
@@ -326,4 +327,6 @@
 				   unsigned int relation,
 				   unsigned int *index);
 
+#endif /* CONFIG_CPU_FREQ_TABLE */
+
 #endif /* _LINUX_CPUFREQ_H */
kernel/cpufreq.c +0 -188

191 lines not on this page · raw message

#5 lore raw

Dominic,
this broke ACPI.

In file included from drivers/acpi/processor.c:49:
include/acpi/processor.h:78: field `freq_table' has incomplete type

AGAIN.

For about the 15th time.

You guys need to talk more. A LOT more. Or y ou need to start checking who is actually _using_ the frequency code, and when you make changes to the interfaces you need to _update_ the users, instead of just causing kernel compiles to fail every frigging time you make a change.

Linus

#6 lore raw

PATCH 1/1 cpufreq: fix compilation of ACPI if !CPU_FREQ [Was: Re: [PATCH UPDATED] cpufreq: move frequency table helpers to extra module]

Quoted 9 lines · Linus Torvalds

Dominic,
this broke ACPI.

In file included from drivers/acpi/processor.c:49:
include/acpi/processor.h:78: field `freq_table' has incomplete type

AGAIN.

Quoted 8 lines

For about the 15th time.

You guys need to talk more. A LOT more. Or y ou need to start checking who is actually _using_ the frequency code, and when you make changes to the interfaces you need to _update_ the users, instead of just causing kernel compiles to fail every frigging time you make a change.

Linus

Linus,

here's the compile fix for this breakage which only appears if CONFIG_ACPI && !(CONFIG_CPU_FREQ_TABLE || CONFIG_CPU_FREQ_TABLE_MODULE) Unfortunately, I forgot to test-compile this combination. Sorry about that.

Dominik

include/linux/cpufreq.h +2 -1
diff -u linux-original/include/linux/cpufreq.h linux/include/linux/cpufreq.h
@@ -299,7 +299,7 @@
 
 #endif /* CONFIG_CPU_FREQ_24_API */
 
-#if defined(CONFIG_CPU_FREQ_TABLE) || defined(CONFIG_CPU_FREQ_TABLE_MODULE)
+
 /*********************************************************************
  *                     FREQUENCY TABLE HELPERS                       *
  *********************************************************************/
@@ -313,6 +313,7 @@
 				    * order */
 };
 
+#if defined(CONFIG_CPU_FREQ_TABLE) || defined(CONFIG_CPU_FREQ_TABLE_MODULE)
 int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
 				    struct cpufreq_frequency_table *table);