mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
x86/cpufreq: Clean up powernow registration
powernow_register_driver() is currently written with a K&R type definition; I'm surprised that compilers don't object to a mismatch with its declaration, which is written in an ANSI-C compatible way. Furthermore, its sole caller is cpufreq_driver_init() which is a pre-smp initcall. There are no other online CPUs, and even if there were, checking the BSP's CPUID data $N times is pointless. Simplify registration to only look at the BSP. While at it, drop obviously unused includes. Also rewrite the expression in cpufreq_driver_init() for clarity. Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Roger Pau Monné <roger.pau@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
ee3407bb05
commit
eed4f94ddb
2 files changed
+18
-30
No files matched your search
@@ -640,13 +640,20 @@ static int __init cpufreq_driver_init(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if ((cpufreq_controller == FREQCTL_xen) &&
|
||||
(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL))
|
||||
ret = cpufreq_register_driver(&acpi_cpufreq_driver);
|
||||
else if ((cpufreq_controller == FREQCTL_xen) &&
|
||||
(boot_cpu_data.x86_vendor &
|
||||
(X86_VENDOR_AMD | X86_VENDOR_HYGON)))
|
||||
ret = powernow_register_driver();
|
||||
if ( cpufreq_controller == FREQCTL_xen )
|
||||
{
|
||||
switch ( boot_cpu_data.x86_vendor )
|
||||
{
|
||||
case X86_VENDOR_INTEL:
|
||||
ret = cpufreq_register_driver(&acpi_cpufreq_driver);
|
||||
break;
|
||||
|
||||
case X86_VENDOR_AMD:
|
||||
case X86_VENDOR_HYGON:
|
||||
ret = powernow_register_driver();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -24,13 +24,9 @@
|
||||
#include <xen/types.h>
|
||||
#include <xen/errno.h>
|
||||
#include <xen/init.h>
|
||||
#include <xen/delay.h>
|
||||
#include <xen/cpumask.h>
|
||||
#include <xen/timer.h>
|
||||
#include <xen/xmalloc.h>
|
||||
#include <asm/bug.h>
|
||||
#include <asm/msr.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/cpufeature.h>
|
||||
#include <acpi/acpi.h>
|
||||
@@ -353,25 +349,10 @@ static const struct cpufreq_driver __initconstrel powernow_cpufreq_driver = {
|
||||
.update = powernow_cpufreq_update
|
||||
};
|
||||
|
||||
unsigned int __init powernow_register_driver()
|
||||
unsigned int __init powernow_register_driver(void)
|
||||
{
|
||||
unsigned int i, ret = 0;
|
||||
if ( !(cpuid_edx(CPUID_FREQ_VOLT_CAPABILITIES) & USE_HW_PSTATE) )
|
||||
return -ENODEV;
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
struct cpuinfo_x86 *c = &cpu_data[i];
|
||||
if (!(c->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON)))
|
||||
ret = -ENODEV;
|
||||
else
|
||||
{
|
||||
u32 eax, ebx, ecx, edx;
|
||||
cpuid(CPUID_FREQ_VOLT_CAPABILITIES, &eax, &ebx, &ecx, &edx);
|
||||
if ((edx & USE_HW_PSTATE) != USE_HW_PSTATE)
|
||||
ret = -ENODEV;
|
||||
}
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = cpufreq_register_driver(&powernow_cpufreq_driver);
|
||||
return ret;
|
||||
return cpufreq_register_driver(&powernow_cpufreq_driver);
|
||||
}
|
||||