From eed4f94ddbf15e70da93a075a878c304f0a079cb Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Fri, 12 Nov 2021 15:13:36 +0000 Subject: [PATCH] x86/cpufreq: Clean up powernow registration MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 Reviewed-by: Roger Pau Monné Acked-by: Jan Beulich --- xen/arch/x86/acpi/cpufreq/cpufreq.c | 21 ++++++++++++++------- xen/arch/x86/acpi/cpufreq/powernow.c | 27 ++++----------------------- 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c b/xen/arch/x86/acpi/cpufreq/cpufreq.c index f1f3c6923f..df9747e0b6 100644 --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c @@ -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; } diff --git a/xen/arch/x86/acpi/cpufreq/powernow.c b/xen/arch/x86/acpi/cpufreq/powernow.c index f620bebc7e..dfd96b9216 100644 --- a/xen/arch/x86/acpi/cpufreq/powernow.c +++ b/xen/arch/x86/acpi/cpufreq/powernow.c @@ -24,13 +24,9 @@ #include #include #include -#include #include -#include #include -#include #include -#include #include #include #include @@ -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; - - 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; - } + if ( !(cpuid_edx(CPUID_FREQ_VOLT_CAPABILITIES) & USE_HW_PSTATE) ) + return -ENODEV; - ret = cpufreq_register_driver(&powernow_cpufreq_driver); - return ret; + return cpufreq_register_driver(&powernow_cpufreq_driver); } -- 2.30.2