cpufreq: Register governors at core_initcall
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>
			
			
This commit is contained in:
		
							parent
							
								
									8cc46ae565
								
							
						
					
					
						commit
						10dd8573b0
					
				| @ -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>"); | ||||
| 
 | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
| @ -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); | ||||
| 
 | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user