|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] x86/cpufreq: Rename cpuid variable/parameters to cpu
On Sat, 11 May 2024, Andrew Cooper wrote:
> Various functions have a parameter or local variable called cpuid, but this
> triggers a MISRA R5.3 violation because we also have a function called cpuid()
> which wraps the real CPUID instruction.
>
> In all these cases, it's a Xen cpu index, which is far more commonly named
> just cpu in our code.
>
> While adjusting these, fix a couple of other issues:
>
> * cpufreq_cpu_init() is on the end of a hypercall (with in-memory parameters,
> even), making EFAULT the wrong error to use. Use EOPNOTSUPP instead.
>
> * check_est_cpu() is wrong to tie EIST to just Intel, and nowhere else using
> EIST makes this restriction. Just check the feature itself, which is more
> succinctly done after being folded into its single caller.
>
> * In powernow_cpufreq_update(), replace an opencoded cpu_online().
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> CC: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
> CC: consulting@xxxxxxxxxxx <consulting@xxxxxxxxxxx>
>
> cpu needs to stay signed for now in set_px_pminfo(), because of get_cpu_id().
> This can be cleaned up by making better use of BAD_APICID, but that's a much
> more involved change.
> ---
> xen/arch/x86/acpi/cpu_idle.c | 14 ++++----
> xen/arch/x86/acpi/cpufreq/cpufreq.c | 24 +++----------
> xen/arch/x86/acpi/cpufreq/hwp.c | 6 ++--
> xen/arch/x86/acpi/cpufreq/powernow.c | 6 ++--
> xen/drivers/cpufreq/cpufreq.c | 18 +++++-----
> xen/drivers/cpufreq/utility.c | 43 +++++++++++------------
> xen/include/acpi/cpufreq/cpufreq.h | 6 ++--
> xen/include/acpi/cpufreq/processor_perf.h | 8 ++---
> xen/include/xen/pmstat.h | 6 ++--
> 9 files changed, 57 insertions(+), 74 deletions(-)
>
> diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c
> index cfce4cc0408f..c8db1aa9913a 100644
> --- a/xen/arch/x86/acpi/cpu_idle.c
> +++ b/xen/arch/x86/acpi/cpu_idle.c
> @@ -1498,14 +1498,14 @@ static void amd_cpuidle_init(struct
> acpi_processor_power *power)
> vendor_override = -1;
> }
>
> -uint32_t pmstat_get_cx_nr(uint32_t cpuid)
> +uint32_t pmstat_get_cx_nr(unsigned int cpu)
> {
> - return processor_powers[cpuid] ? processor_powers[cpuid]->count : 0;
> + return processor_powers[cpu] ? processor_powers[cpu]->count : 0;
> }
>
> -int pmstat_get_cx_stat(uint32_t cpuid, struct pm_cx_stat *stat)
> +int pmstat_get_cx_stat(unsigned int cpu, struct pm_cx_stat *stat)
> {
> - struct acpi_processor_power *power = processor_powers[cpuid];
> + struct acpi_processor_power *power = processor_powers[cpu];
> uint64_t idle_usage = 0, idle_res = 0;
> uint64_t last_state_update_tick, current_stime, current_tick;
> uint64_t usage[ACPI_PROCESSOR_MAX_POWER] = { 0 };
> @@ -1522,7 +1522,7 @@ int pmstat_get_cx_stat(uint32_t cpuid, struct
> pm_cx_stat *stat)
> return 0;
> }
>
> - stat->idle_time = get_cpu_idle_time(cpuid);
> + stat->idle_time = get_cpu_idle_time(cpu);
> nr = min(stat->nr, power->count);
>
> /* mimic the stat when detail info hasn't been registered by dom0 */
> @@ -1572,7 +1572,7 @@ int pmstat_get_cx_stat(uint32_t cpuid, struct
> pm_cx_stat *stat)
> idle_res += res[i];
> }
>
> - get_hw_residencies(cpuid, &hw_res);
> + get_hw_residencies(cpu, &hw_res);
>
> #define PUT_xC(what, n) do { \
> if ( stat->nr_##what >= n && \
> @@ -1613,7 +1613,7 @@ int pmstat_get_cx_stat(uint32_t cpuid, struct
> pm_cx_stat *stat)
> return 0;
> }
>
> -int pmstat_reset_cx_stat(uint32_t cpuid)
> +int pmstat_reset_cx_stat(unsigned int cpu)
> {
> return 0;
> }
> diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c
> b/xen/arch/x86/acpi/cpufreq/cpufreq.c
> index 2b6ef99678ae..a341f2f02063 100644
> --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c
> +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c
> @@ -55,17 +55,6 @@ struct acpi_cpufreq_data *cpufreq_drv_data[NR_CPUS];
> static bool __read_mostly acpi_pstate_strict;
> boolean_param("acpi_pstate_strict", acpi_pstate_strict);
>
> -static int check_est_cpu(unsigned int cpuid)
> -{
> - struct cpuinfo_x86 *cpu = &cpu_data[cpuid];
> -
> - if (cpu->x86_vendor != X86_VENDOR_INTEL ||
> - !cpu_has(cpu, X86_FEATURE_EIST))
> - return 0;
> -
> - return 1;
> -}
> -
> static unsigned extract_io(u32 value, struct acpi_cpufreq_data *data)
> {
> struct processor_performance *perf;
> @@ -530,7 +519,7 @@ static int cf_check acpi_cpufreq_cpu_init(struct
> cpufreq_policy *policy)
> if (cpufreq_verbose)
> printk("xen_pminfo: @acpi_cpufreq_cpu_init,"
> "HARDWARE addr space\n");
> - if (!check_est_cpu(cpu)) {
> + if (!cpu_has(c, X86_FEATURE_EIST)) {
> result = -ENODEV;
> goto err_unreg;
> }
> @@ -690,15 +679,12 @@ static int __init cf_check
> cpufreq_driver_late_init(void)
> }
> __initcall(cpufreq_driver_late_init);
>
> -int cpufreq_cpu_init(unsigned int cpuid)
> +int cpufreq_cpu_init(unsigned int cpu)
> {
> - int ret;
> -
> /* Currently we only handle Intel, AMD and Hygon processor */
> if ( boot_cpu_data.x86_vendor &
> (X86_VENDOR_INTEL | X86_VENDOR_AMD | X86_VENDOR_HYGON) )
> - ret = cpufreq_add_cpu(cpuid);
> - else
> - ret = -EFAULT;
> - return ret;
> + return cpufreq_add_cpu(cpu);
> +
> + return -EOPNOTSUPP;
> }
> diff --git a/xen/arch/x86/acpi/cpufreq/hwp.c b/xen/arch/x86/acpi/cpufreq/hwp.c
> index e61212803e71..59b57a4cef86 100644
> --- a/xen/arch/x86/acpi/cpufreq/hwp.c
> +++ b/xen/arch/x86/acpi/cpufreq/hwp.c
> @@ -506,11 +506,11 @@ static void cf_check hwp_set_misc_turbo(void *info)
> }
> }
>
> -static int cf_check hwp_cpufreq_update(int cpuid, struct cpufreq_policy
> *policy)
> +static int cf_check hwp_cpufreq_update(unsigned int cpu, struct
> cpufreq_policy *policy)
> {
> - on_selected_cpus(cpumask_of(cpuid), hwp_set_misc_turbo, policy, 1);
> + on_selected_cpus(cpumask_of(cpu), hwp_set_misc_turbo, policy, 1);
>
> - return per_cpu(hwp_drv_data, cpuid)->ret;
> + return per_cpu(hwp_drv_data, cpu)->ret;
> }
>
> static const struct cpufreq_driver __initconst_cf_clobber
> diff --git a/xen/arch/x86/acpi/cpufreq/powernow.c
> b/xen/arch/x86/acpi/cpufreq/powernow.c
> index 8a27ee82a5b0..69364e185562 100644
> --- a/xen/arch/x86/acpi/cpufreq/powernow.c
> +++ b/xen/arch/x86/acpi/cpufreq/powernow.c
> @@ -68,12 +68,12 @@ static void cf_check update_cpb(void *data)
> }
>
> static int cf_check powernow_cpufreq_update(
> - int cpuid, struct cpufreq_policy *policy)
> + unsigned int cpu, struct cpufreq_policy *policy)
> {
> - if (!cpumask_test_cpu(cpuid, &cpu_online_map))
> + if ( !cpu_online(cpu) )
> return -EINVAL;
>
> - on_selected_cpus(cpumask_of(cpuid), update_cpb, policy, 1);
> + on_selected_cpus(cpumask_of(cpu), update_cpb, policy, 1);
>
> return 0;
> }
> diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c
> index 36c800f4fa39..a74593b70577 100644
> --- a/xen/drivers/cpufreq/cpufreq.c
> +++ b/xen/drivers/cpufreq/cpufreq.c
> @@ -459,21 +459,21 @@ static void print_PPC(unsigned int platform_limit)
>
> int set_px_pminfo(uint32_t acpi_id, struct xen_processor_performance *perf)
> {
> - int ret=0, cpuid;
> + int ret=0, cpu;
> struct processor_pminfo *pmpt;
> struct processor_performance *pxpt;
>
> - cpuid = get_cpu_id(acpi_id);
> - if ( cpuid < 0 || !perf )
> + cpu = get_cpu_id(acpi_id);
> + if ( cpu < 0 || !perf )
> {
> ret = -EINVAL;
> goto out;
> }
> if ( cpufreq_verbose )
> - printk("Set CPU acpi_id(%d) cpuid(%d) Px State info:\n",
> + printk("Set CPU acpi_id(%d) cpu(%d) Px State info:\n",
> acpi_id, cpuid);
This cpuid should be changed as well?
Everything else looks OK to me. You can fix on commit.
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |