mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 13:14:07 +08:00
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