Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq
* 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/davej/cpufreq: [CPUFREQ] p4-clockmod: print EST-capable warning message only once [CPUFREQ] fix BUG on cpufreq policy init failure [CPUFREQ] Fix another notifier leak in powernow-k8. [CPUFREQ] Missing "unregister_cpu_notifier" in powernow-k8.c
This commit is contained in:
commit
ebff7c92ab
@ -158,9 +158,9 @@ static unsigned int cpufreq_p4_get_frequency(struct cpuinfo_x86 *c)
|
||||
{
|
||||
if (c->x86 == 0x06) {
|
||||
if (cpu_has(c, X86_FEATURE_EST))
|
||||
printk(KERN_WARNING PFX "Warning: EST-capable CPU "
|
||||
"detected. The acpi-cpufreq module offers "
|
||||
"voltage scaling in addition of frequency "
|
||||
printk_once(KERN_WARNING PFX "Warning: EST-capable "
|
||||
"CPU detected. The acpi-cpufreq module offers "
|
||||
"voltage scaling in addition to frequency "
|
||||
"scaling. You should use that instead of "
|
||||
"p4-clockmod, if possible.\n");
|
||||
switch (c->x86_model) {
|
||||
|
@ -1537,6 +1537,7 @@ static struct notifier_block cpb_nb = {
|
||||
static int __cpuinit powernowk8_init(void)
|
||||
{
|
||||
unsigned int i, supported_cpus = 0, cpu;
|
||||
int rv;
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
int rc;
|
||||
@ -1555,14 +1556,14 @@ static int __cpuinit powernowk8_init(void)
|
||||
|
||||
cpb_capable = true;
|
||||
|
||||
register_cpu_notifier(&cpb_nb);
|
||||
|
||||
msrs = msrs_alloc();
|
||||
if (!msrs) {
|
||||
printk(KERN_ERR "%s: Error allocating msrs!\n", __func__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
register_cpu_notifier(&cpb_nb);
|
||||
|
||||
rdmsr_on_cpus(cpu_online_mask, MSR_K7_HWCR, msrs);
|
||||
|
||||
for_each_cpu(cpu, cpu_online_mask) {
|
||||
@ -1574,7 +1575,13 @@ static int __cpuinit powernowk8_init(void)
|
||||
(cpb_enabled ? "on" : "off"));
|
||||
}
|
||||
|
||||
return cpufreq_register_driver(&cpufreq_amd64_driver);
|
||||
rv = cpufreq_register_driver(&cpufreq_amd64_driver);
|
||||
if (rv < 0 && boot_cpu_has(X86_FEATURE_CPB)) {
|
||||
unregister_cpu_notifier(&cpb_nb);
|
||||
msrs_free(msrs);
|
||||
msrs = NULL;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
/* driver entry point for term */
|
||||
|
@ -1919,8 +1919,10 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
|
||||
|
||||
ret = sysdev_driver_register(&cpu_sysdev_class,
|
||||
&cpufreq_sysdev_driver);
|
||||
if (ret)
|
||||
goto err_null_driver;
|
||||
|
||||
if ((!ret) && !(cpufreq_driver->flags & CPUFREQ_STICKY)) {
|
||||
if (!(cpufreq_driver->flags & CPUFREQ_STICKY)) {
|
||||
int i;
|
||||
ret = -ENODEV;
|
||||
|
||||
@ -1935,21 +1937,22 @@ int cpufreq_register_driver(struct cpufreq_driver *driver_data)
|
||||
if (ret) {
|
||||
dprintk("no CPU initialized for driver %s\n",
|
||||
driver_data->name);
|
||||
sysdev_driver_unregister(&cpu_sysdev_class,
|
||||
&cpufreq_sysdev_driver);
|
||||
|
||||
spin_lock_irqsave(&cpufreq_driver_lock, flags);
|
||||
cpufreq_driver = NULL;
|
||||
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
||||
goto err_sysdev_unreg;
|
||||
}
|
||||
}
|
||||
|
||||
if (!ret) {
|
||||
register_hotcpu_notifier(&cpufreq_cpu_notifier);
|
||||
dprintk("driver %s up and running\n", driver_data->name);
|
||||
cpufreq_debug_enable_ratelimit();
|
||||
}
|
||||
register_hotcpu_notifier(&cpufreq_cpu_notifier);
|
||||
dprintk("driver %s up and running\n", driver_data->name);
|
||||
cpufreq_debug_enable_ratelimit();
|
||||
|
||||
return 0;
|
||||
err_sysdev_unreg:
|
||||
sysdev_driver_unregister(&cpu_sysdev_class,
|
||||
&cpufreq_sysdev_driver);
|
||||
err_null_driver:
|
||||
spin_lock_irqsave(&cpufreq_driver_lock, flags);
|
||||
cpufreq_driver = NULL;
|
||||
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpufreq_register_driver);
|
||||
|
Loading…
Reference in New Issue
Block a user