mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 20:51:03 +02: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:
committed by
Rafael J. Wysocki
parent
8cc46ae565
commit
10dd8573b0
@@ -126,30 +126,8 @@ static struct cpufreq_governor spu_governor = {
|
|||||||
.stop = spu_gov_stop,
|
.stop = spu_gov_stop,
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
cpufreq_governor_init(spu_governor);
|
||||||
/*
|
cpufreq_governor_exit(spu_governor);
|
||||||
* 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);
|
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
MODULE_AUTHOR("Christian Krafft <krafft@de.ibm.com>");
|
MODULE_AUTHOR("Christian Krafft <krafft@de.ibm.com>");
|
||||||
|
|
||||||
|
@@ -322,17 +322,7 @@ static struct dbs_governor cs_governor = {
|
|||||||
.start = cs_start,
|
.start = cs_start,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CPU_FREQ_GOV_CONSERVATIVE (&cs_governor.gov)
|
#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);
|
|
||||||
}
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Alexander Clouter <alex@digriz.org.uk>");
|
MODULE_AUTHOR("Alexander Clouter <alex@digriz.org.uk>");
|
||||||
MODULE_DESCRIPTION("'cpufreq_conservative' - A dynamic cpufreq governor for "
|
MODULE_DESCRIPTION("'cpufreq_conservative' - A dynamic cpufreq governor for "
|
||||||
@@ -343,11 +333,9 @@ MODULE_LICENSE("GPL");
|
|||||||
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
|
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE
|
||||||
struct cpufreq_governor *cpufreq_default_governor(void)
|
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
|
#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,
|
.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)
|
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;
|
continue;
|
||||||
|
|
||||||
policy = cpufreq_cpu_get_raw(cpu);
|
policy = cpufreq_cpu_get_raw(cpu);
|
||||||
if (!policy || policy->governor != CPU_FREQ_GOV_ONDEMAND)
|
if (!policy || policy->governor != &CPU_FREQ_GOV_ONDEMAND)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
policy_dbs = policy->governor_data;
|
policy_dbs = policy->governor_data;
|
||||||
@@ -461,16 +461,6 @@ void od_unregister_powersave_bias_handler(void)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler);
|
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("Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>");
|
||||||
MODULE_AUTHOR("Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>");
|
MODULE_AUTHOR("Alexey Starikovskiy <alexey.y.starikovskiy@intel.com>");
|
||||||
MODULE_DESCRIPTION("'cpufreq_ondemand' - A dynamic cpufreq governor for "
|
MODULE_DESCRIPTION("'cpufreq_ondemand' - A dynamic cpufreq governor for "
|
||||||
@@ -480,11 +470,9 @@ MODULE_LICENSE("GPL");
|
|||||||
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
|
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND
|
||||||
struct cpufreq_governor *cpufreq_default_governor(void)
|
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
|
#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,
|
.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
|
#ifdef CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE
|
||||||
struct cpufreq_governor *cpufreq_default_governor(void)
|
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_DESCRIPTION("CPUfreq policy governor 'performance'");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
core_initcall(cpufreq_gov_performance_init);
|
cpufreq_governor_init(cpufreq_gov_performance);
|
||||||
module_exit(cpufreq_gov_performance_exit);
|
cpufreq_governor_exit(cpufreq_gov_performance);
|
||||||
|
@@ -23,16 +23,6 @@ static struct cpufreq_governor cpufreq_gov_powersave = {
|
|||||||
.owner = THIS_MODULE,
|
.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_AUTHOR("Dominik Brodowski <linux@brodo.de>");
|
||||||
MODULE_DESCRIPTION("CPUfreq policy governor 'powersave'");
|
MODULE_DESCRIPTION("CPUfreq policy governor 'powersave'");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
@@ -42,9 +32,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||||||
{
|
{
|
||||||
return &cpufreq_gov_powersave;
|
return &cpufreq_gov_powersave;
|
||||||
}
|
}
|
||||||
|
|
||||||
core_initcall(cpufreq_gov_powersave_init);
|
|
||||||
#else
|
|
||||||
module_init(cpufreq_gov_powersave_init);
|
|
||||||
#endif
|
#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,
|
.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>, "
|
MODULE_AUTHOR("Dominik Brodowski <linux@brodo.de>, "
|
||||||
"Russell King <rmk@arm.linux.org.uk>");
|
"Russell King <rmk@arm.linux.org.uk>");
|
||||||
MODULE_DESCRIPTION("CPUfreq policy governor 'userspace'");
|
MODULE_DESCRIPTION("CPUfreq policy governor 'userspace'");
|
||||||
@@ -146,9 +136,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||||||
{
|
{
|
||||||
return &cpufreq_gov_userspace;
|
return &cpufreq_gov_userspace;
|
||||||
}
|
}
|
||||||
|
|
||||||
core_initcall(cpufreq_gov_userspace_init);
|
|
||||||
#else
|
|
||||||
module_init(cpufreq_gov_userspace_init);
|
|
||||||
#endif
|
#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);
|
int cpufreq_register_governor(struct cpufreq_governor *governor);
|
||||||
void cpufreq_unregister_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_default_governor(void);
|
||||||
struct cpufreq_governor *cpufreq_fallback_governor(void);
|
struct cpufreq_governor *cpufreq_fallback_governor(void);
|
||||||
|
|
||||||
|
@@ -909,11 +909,7 @@ struct cpufreq_governor *cpufreq_default_governor(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static int __init sugov_register(void)
|
cpufreq_governor_init(schedutil_gov);
|
||||||
{
|
|
||||||
return cpufreq_register_governor(&schedutil_gov);
|
|
||||||
}
|
|
||||||
core_initcall(sugov_register);
|
|
||||||
|
|
||||||
#ifdef CONFIG_ENERGY_MODEL
|
#ifdef CONFIG_ENERGY_MODEL
|
||||||
extern bool sched_energy_update;
|
extern bool sched_energy_update;
|
||||||
|
Reference in New Issue
Block a user