cpufreq: Register governors at core_initcall
authorQuentin Perret <qperret@google.com>
Mon, 29 Jun 2020 08:24:59 +0000 (13:54 +0530)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 2 Jul 2020 11:03:30 +0000 (13:03 +0200)
Currently, most CPUFreq governors are registered at the core_initcall
time when the given governor is the default one, and the module_init
time otherwise.

In preparation for letting users specify the default governor on the
kernel command line, change all of them to be registered at the
core_initcall unconditionally, as it is already the case for the
schedutil and performance governors. This will allow us to assume
that builtin governors have been registered before the built-in
CPUFreq drivers probe.

And since all governors have similar init/exit patterns now, introduce
two new macros, cpufreq_governor_{init,exit}(), to factorize the code.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Quentin Perret <qperret@google.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
[ rjw: Changelog ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
arch/powerpc/platforms/cell/cpufreq_spudemand.c
drivers/cpufreq/cpufreq_conservative.c
drivers/cpufreq/cpufreq_ondemand.c
drivers/cpufreq/cpufreq_performance.c
drivers/cpufreq/cpufreq_powersave.c
drivers/cpufreq/cpufreq_userspace.c
include/linux/cpufreq.h
kernel/sched/cpufreq_schedutil.c

index 55b31eadb3c8ec911928b6eabc7eac73f5a8b6b6..ca7849e113d7fbc485eef1a873e3241e4abaf287 100644 (file)
@@ -126,30 +126,8 @@ static struct cpufreq_governor spu_governor = {
        .stop = spu_gov_stop,
        .owner = THIS_MODULE,
 };
-
-/*
- * module init and destoy
- */
-
-static int __init spu_gov_init(void)
-{
-       int ret;
-
-       ret = cpufreq_register_governor(&spu_governor);
-       if (ret)
-               printk(KERN_ERR "registration of governor failed\n");
-       return ret;
-}
-
-static void __exit spu_gov_exit(void)
-{
-       cpufreq_unregister_governor(&spu_governor);
-}
-
-
-module_init(spu_gov_init);
-module_exit(spu_gov_exit);
+cpufreq_governor_init(spu_governor);
+cpufreq_governor_exit(spu_governor);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Christian Krafft <krafft@de.ibm.com>");
-
index 737ff3b9c2c0983736511d685922737c4dae324b..aa39ff31ec9f76ec0f83b861c55c91af0e105c57 100644 (file)
@@ -322,17 +322,7 @@ static struct dbs_governor cs_governor = {
        .start = cs_start,
 };
 
-#define CPU_FREQ_GOV_CONSERVATIVE      (&cs_governor.gov)
-
-static int __init cpufreq_gov_dbs_init(void)
-{
-       return cpufreq_register_governor(CPU_FREQ_GOV_CONSERVATIVE);
-}
-
-static void __exit cpufreq_gov_dbs_exit(void)
-{
-       cpufreq_unregister_governor(CPU_FREQ_GOV_CONSERVATIVE);
-}
+#define CPU_FREQ_GOV_CONSERVATIVE      (cs_governor.gov)
 
 MODULE_AUTHOR("Alexander Clouter <alex@digriz.org.uk>");
 MODULE_DESCRIPTION("'cpufreq_conservative' - A dynamic cpufreq governor for "
@@ -343,11 +333,9 @@ MODULE_LICENSE("GPL");
 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
 struct cpufreq_governor *cpufreq_default_governor(void)
 {
-       return CPU_FREQ_GOV_CONSERVATIVE;
+       return &CPU_FREQ_GOV_CONSERVATIVE;
 }
-
-core_initcall(cpufreq_gov_dbs_init);
-#else
-module_init(cpufreq_gov_dbs_init);
 #endif
-module_exit(cpufreq_gov_dbs_exit);
+
+cpufreq_governor_init(CPU_FREQ_GOV_CONSERVATIVE);
+cpufreq_governor_exit(CPU_FREQ_GOV_CONSERVATIVE);
index 82a4d37ddecb3f79de5e75093006eb7ac5817bad..ac361a8b1d3bb4cafe3e68e74445e91032c8498f 100644 (file)
@@ -408,7 +408,7 @@ static struct dbs_governor od_dbs_gov = {
        .start = od_start,
 };
 
-#define CPU_FREQ_GOV_ONDEMAND  (&od_dbs_gov.gov)
+#define CPU_FREQ_GOV_ONDEMAND  (od_dbs_gov.gov)
 
 static void od_set_powersave_bias(unsigned int powersave_bias)
 {
@@ -429,7 +429,7 @@ static void od_set_powersave_bias(unsigned int powersave_bias)
                        continue;
 
                policy = cpufreq_cpu_get_raw(cpu);
-               if (!policy || policy->governor != CPU_FREQ_GOV_ONDEMAND)
+               if (!policy || policy->governor != &CPU_FREQ_GOV_ONDEMAND)
                        continue;
 
                policy_dbs = policy->governor_data;
@@ -461,16 +461,6 @@ void od_unregister_powersave_bias_handler(void)
 }
 EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler);
 
-static int __init cpufreq_gov_dbs_init(void)
-{
-       return cpufreq_register_governor(CPU_FREQ_GOV_ONDEMAND);
-}
-
-static void __exit cpufreq_gov_dbs_exit(void)
-{
-       cpufreq_unregister_governor(CPU_FREQ_GOV_ONDEMAND);
-}
-
 MODULE_AUTHOR("Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>");
 MODULE_AUTHOR("Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>");
 MODULE_DESCRIPTION("'cpufreq_ondemand' - A dynamic cpufreq governor for "
@@ -480,11 +470,9 @@ MODULE_LICENSE("GPL");
 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
 struct cpufreq_governor *cpufreq_default_governor(void)
 {
-       return CPU_FREQ_GOV_ONDEMAND;
+       return &CPU_FREQ_GOV_ONDEMAND;
 }
-
-core_initcall(cpufreq_gov_dbs_init);
-#else
-module_init(cpufreq_gov_dbs_init);
 #endif
-module_exit(cpufreq_gov_dbs_exit);
+
+cpufreq_governor_init(CPU_FREQ_GOV_ONDEMAND);
+cpufreq_governor_exit(CPU_FREQ_GOV_ONDEMAND);
index def9afe0f5b863e20a4907aa19cd8c2f60af26d4..71c1d9aba77271957dbb3f4bccacbba9c20674d3 100644 (file)
@@ -23,16 +23,6 @@ static struct cpufreq_governor cpufreq_gov_performance = {
        .limits         = cpufreq_gov_performance_limits,
 };
 
-static int __init cpufreq_gov_performance_init(void)
-{
-       return cpufreq_register_governor(&cpufreq_gov_performance);
-}
-
-static void __exit cpufreq_gov_performance_exit(void)
-{
-       cpufreq_unregister_governor(&cpufreq_gov_performance);
-}
-
 #ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
 struct cpufreq_governor *cpufreq_default_governor(void)
 {
@@ -50,5 +40,5 @@ MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>");
 MODULE_DESCRIPTION("CPUfreq policy governor 'performance'");
 MODULE_LICENSE("GPL");
 
-core_initcall(cpufreq_gov_performance_init);
-module_exit(cpufreq_gov_performance_exit);
+cpufreq_governor_init(cpufreq_gov_performance);
+cpufreq_governor_exit(cpufreq_gov_performance);
index 1ae66019eb8357ac23ad13deb6d718c7bf25b9f6..7749522355b5946914ac8099d58789a75729c1a2 100644 (file)
@@ -23,16 +23,6 @@ static struct cpufreq_governor cpufreq_gov_powersave = {
        .owner          = THIS_MODULE,
 };
 
-static int __init cpufreq_gov_powersave_init(void)
-{
-       return cpufreq_register_governor(&cpufreq_gov_powersave);
-}
-
-static void __exit cpufreq_gov_powersave_exit(void)
-{
-       cpufreq_unregister_governor(&cpufreq_gov_powersave);
-}
-
 MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>");
 MODULE_DESCRIPTION("CPUfreq policy governor 'powersave'");
 MODULE_LICENSE("GPL");
@@ -42,9 +32,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 {
        return &cpufreq_gov_powersave;
 }
-
-core_initcall(cpufreq_gov_powersave_init);
-#else
-module_init(cpufreq_gov_powersave_init);
 #endif
-module_exit(cpufreq_gov_powersave_exit);
+
+cpufreq_governor_init(cpufreq_gov_powersave);
+cpufreq_governor_exit(cpufreq_gov_powersave);
index b43e7cd502c587f3db94d2d07546f377965d5b7c..50a4d784658009112d1d160e8b3bc8d9d9f2de0d 100644 (file)
@@ -126,16 +126,6 @@ static struct cpufreq_governor cpufreq_gov_userspace = {
        .owner          = THIS_MODULE,
 };
 
-static int __init cpufreq_gov_userspace_init(void)
-{
-       return cpufreq_register_governor(&cpufreq_gov_userspace);
-}
-
-static void __exit cpufreq_gov_userspace_exit(void)
-{
-       cpufreq_unregister_governor(&cpufreq_gov_userspace);
-}
-
 MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>, "
                "Russell King <rmk@arm.linux.org.uk>");
 MODULE_DESCRIPTION("CPUfreq policy governor 'userspace'");
@@ -146,9 +136,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 {
        return &cpufreq_gov_userspace;
 }
-
-core_initcall(cpufreq_gov_userspace_init);
-#else
-module_init(cpufreq_gov_userspace_init);
 #endif
-module_exit(cpufreq_gov_userspace_exit);
+
+cpufreq_governor_init(cpufreq_gov_userspace);
+cpufreq_governor_exit(cpufreq_gov_userspace);
index 3494f6763597e7992af3e2afaa74cee471ce96c3..e62b022cb07e5786dafefc745c70ce8354569148 100644 (file)
@@ -577,6 +577,20 @@ unsigned int cpufreq_policy_transition_delay_us(struct cpufreq_policy *policy);
 int cpufreq_register_governor(struct cpufreq_governor *governor);
 void cpufreq_unregister_governor(struct cpufreq_governor *governor);
 
+#define cpufreq_governor_init(__governor)                      \
+static int __init __governor##_init(void)                      \
+{                                                              \
+       return cpufreq_register_governor(&__governor);  \
+}                                                              \
+core_initcall(__governor##_init)
+
+#define cpufreq_governor_exit(__governor)                      \
+static void __exit __governor##_exit(void)                     \
+{                                                              \
+       return cpufreq_unregister_governor(&__governor);        \
+}                                                              \
+module_exit(__governor##_exit)
+
 struct cpufreq_governor *cpufreq_default_governor(void);
 struct cpufreq_governor *cpufreq_fallback_governor(void);
 
index 7fbaee24c824f032ea34428ca0d50d3e49d51c0e..402a09af9f4305a7515467c8bc3c11bd19cdb7d3 100644 (file)
@@ -909,11 +909,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
 }
 #endif
 
-static int __init sugov_register(void)
-{
-       return cpufreq_register_governor(&schedutil_gov);
-}
-core_initcall(sugov_register);
+cpufreq_governor_init(schedutil_gov);
 
 #ifdef CONFIG_ENERGY_MODEL
 extern bool sched_energy_update;