From: Andrew Cooper <andrew.cooper3@citrix.com>
To: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@globallogic.com>,
Ian Campbell <ian.campbell@citrix.com>,
Stefano Stabellini <stefano.stabellini@citrix.com>,
Tim Deegan <tim@xen.org>,
xen-devel@lists.xen.org
Subject: Re: [RFC PATCH 01/13] cpufreq: move cpufreq.h file to the xen/include/cpufreq location
Date: Tue, 7 Oct 2014 15:22:15 +0100 [thread overview]
Message-ID: <5433F717.1040106@citrix.com> (raw)
In-Reply-To: <1412691566-7320-2-git-send-email-oleksandr.dmytryshyn@globallogic.com>
On 07/10/14 15:19, Oleksandr Dmytryshyn wrote:
> Cpufreq driver should be more generalizable (not ACPI-specific).
> Thus this file should be placed to the proper location.
>
> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@globallogic.com>
In the future, please prepare patch series with the -M option which will
detect the move of cpufreq.h as a rename, and vastly reduce the size of
the patches.
~Andrew
> ---
> xen/arch/x86/acpi/cpu_idle.c | 2 +-
> xen/arch/x86/acpi/cpufreq/cpufreq.c | 2 +-
> xen/arch/x86/acpi/cpufreq/powernow.c | 2 +-
> xen/arch/x86/acpi/power.c | 2 +-
> xen/arch/x86/cpu/mwait-idle.c | 2 +-
> xen/drivers/acpi/pmstat.c | 2 +-
> xen/drivers/cpufreq/cpufreq.c | 2 +-
> xen/drivers/cpufreq/cpufreq_misc_governors.c | 2 +-
> xen/drivers/cpufreq/cpufreq_ondemand.c | 4 +-
> xen/drivers/cpufreq/utility.c | 2 +-
> xen/include/acpi/cpufreq/cpufreq.h | 258 --------------------------
> xen/include/cpufreq/cpufreq.h | 261 +++++++++++++++++++++++++++
> 12 files changed, 272 insertions(+), 269 deletions(-)
> delete mode 100644 xen/include/acpi/cpufreq/cpufreq.h
> create mode 100644 xen/include/cpufreq/cpufreq.h
>
> diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c
> index 597befa..98726ad 100644
> --- a/xen/arch/x86/acpi/cpu_idle.c
> +++ b/xen/arch/x86/acpi/cpu_idle.c
> @@ -51,7 +51,7 @@
> #include <xen/softirq.h>
> #include <public/platform.h>
> #include <public/sysctl.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
> #include <asm/apic.h>
> #include <asm/cpuidle.h>
> #include <asm/mwait.h>
> diff --git a/xen/arch/x86/acpi/cpufreq/cpufreq.c b/xen/arch/x86/acpi/cpufreq/cpufreq.c
> index 4a6aeb3..4569d49 100644
> --- a/xen/arch/x86/acpi/cpufreq/cpufreq.c
> +++ b/xen/arch/x86/acpi/cpufreq/cpufreq.c
> @@ -42,7 +42,7 @@
> #include <asm/percpu.h>
> #include <asm/cpufeature.h>
> #include <acpi/acpi.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> enum {
> UNDEFINED_CAPABLE = 0,
> diff --git a/xen/arch/x86/acpi/cpufreq/powernow.c b/xen/arch/x86/acpi/cpufreq/powernow.c
> index 2c9fea2..0462e31 100644
> --- a/xen/arch/x86/acpi/cpufreq/powernow.c
> +++ b/xen/arch/x86/acpi/cpufreq/powernow.c
> @@ -36,7 +36,7 @@
> #include <asm/percpu.h>
> #include <asm/cpufeature.h>
> #include <acpi/acpi.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> #define CPUID_6_ECX_APERFMPERF_CAPABILITY (0x1)
> #define CPUID_FREQ_VOLT_CAPABILITIES 0x80000007
> diff --git a/xen/arch/x86/acpi/power.c b/xen/arch/x86/acpi/power.c
> index f41f0de..d139e96 100644
> --- a/xen/arch/x86/acpi/power.c
> +++ b/xen/arch/x86/acpi/power.c
> @@ -29,7 +29,7 @@
> #include <asm/tboot.h>
> #include <asm/apic.h>
> #include <asm/io_apic.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> uint32_t system_reset_counter = 1;
>
> diff --git a/xen/arch/x86/cpu/mwait-idle.c b/xen/arch/x86/cpu/mwait-idle.c
> index 85179f2..a00c19a 100644
> --- a/xen/arch/x86/cpu/mwait-idle.c
> +++ b/xen/arch/x86/cpu/mwait-idle.c
> @@ -59,7 +59,7 @@
> #include <asm/hpet.h>
> #include <asm/mwait.h>
> #include <asm/msr.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> #define MWAIT_IDLE_VERSION "0.4"
> #undef PREFIX
> diff --git a/xen/drivers/acpi/pmstat.c b/xen/drivers/acpi/pmstat.c
> index daac2da..bd6ca43 100644
> --- a/xen/drivers/acpi/pmstat.c
> +++ b/xen/drivers/acpi/pmstat.c
> @@ -40,7 +40,7 @@
> #include <xen/acpi.h>
>
> #include <public/sysctl.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
> #include <xen/pmstat.h>
>
> DEFINE_PER_CPU_READ_MOSTLY(struct pm_px *, cpufreq_statistic_data);
> diff --git a/xen/drivers/cpufreq/cpufreq.c b/xen/drivers/cpufreq/cpufreq.c
> index ab66884..884d2bb 100644
> --- a/xen/drivers/cpufreq/cpufreq.c
> +++ b/xen/drivers/cpufreq/cpufreq.c
> @@ -44,7 +44,7 @@
> #include <asm/processor.h>
> #include <asm/percpu.h>
> #include <acpi/acpi.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> static unsigned int __read_mostly usr_min_freq;
> static unsigned int __read_mostly usr_max_freq;
> diff --git a/xen/drivers/cpufreq/cpufreq_misc_governors.c b/xen/drivers/cpufreq/cpufreq_misc_governors.c
> index 746bbcd..881e4bb 100644
> --- a/xen/drivers/cpufreq/cpufreq_misc_governors.c
> +++ b/xen/drivers/cpufreq/cpufreq_misc_governors.c
> @@ -18,7 +18,7 @@
> #include <xen/init.h>
> #include <xen/percpu.h>
> #include <xen/sched.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> /*
> * cpufreq userspace governor
> diff --git a/xen/drivers/cpufreq/cpufreq_ondemand.c b/xen/drivers/cpufreq/cpufreq_ondemand.c
> index 7fdba03..f299116 100644
> --- a/xen/drivers/cpufreq/cpufreq_ondemand.c
> +++ b/xen/drivers/cpufreq/cpufreq_ondemand.c
> @@ -1,5 +1,5 @@
> /*
> - * xen/arch/x86/acpi/cpufreq/cpufreq_ondemand.c
> + * xen/drivers/cpufreq/cpufreq_ondemand.c
> *
> * Copyright (C) 2001 Russell King
> * (C) 2003 Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>.
> @@ -18,7 +18,7 @@
> #include <xen/types.h>
> #include <xen/sched.h>
> #include <xen/timer.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
>
> #define DEF_FREQUENCY_UP_THRESHOLD (80)
> #define MIN_FREQUENCY_UP_THRESHOLD (11)
> diff --git a/xen/drivers/cpufreq/utility.c b/xen/drivers/cpufreq/utility.c
> index 519f862..c9150a1 100644
> --- a/xen/drivers/cpufreq/utility.c
> +++ b/xen/drivers/cpufreq/utility.c
> @@ -28,7 +28,7 @@
> #include <xen/sched.h>
> #include <xen/timer.h>
> #include <xen/trace.h>
> -#include <acpi/cpufreq/cpufreq.h>
> +#include <cpufreq/cpufreq.h>
> #include <public/sysctl.h>
>
> struct cpufreq_driver *cpufreq_driver;
> diff --git a/xen/include/acpi/cpufreq/cpufreq.h b/xen/include/acpi/cpufreq/cpufreq.h
> deleted file mode 100644
> index f96c3e4..0000000
> --- a/xen/include/acpi/cpufreq/cpufreq.h
> +++ /dev/null
> @@ -1,258 +0,0 @@
> -/*
> - * xen/include/acpi/cpufreq/cpufreq.h
> - *
> - * Copyright (C) 2001 Russell King
> - * (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
> - *
> - * $Id: cpufreq.h,v 1.36 2003/01/20 17:31:48 db Exp $
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 as
> - * published by the Free Software Foundation.
> - */
> -
> -#ifndef __XEN_CPUFREQ_PM_H__
> -#define __XEN_CPUFREQ_PM_H__
> -
> -#include <xen/types.h>
> -#include <xen/list.h>
> -#include <xen/cpumask.h>
> -
> -#include "processor_perf.h"
> -
> -DECLARE_PER_CPU(spinlock_t, cpufreq_statistic_lock);
> -
> -extern bool_t cpufreq_verbose;
> -
> -struct cpufreq_governor;
> -
> -struct acpi_cpufreq_data {
> - struct processor_performance *acpi_data;
> - struct cpufreq_frequency_table *freq_table;
> - unsigned int arch_cpu_flags;
> -};
> -
> -extern struct acpi_cpufreq_data *cpufreq_drv_data[NR_CPUS];
> -
> -struct cpufreq_cpuinfo {
> - unsigned int max_freq;
> - unsigned int second_max_freq; /* P1 if Turbo Mode is on */
> - unsigned int min_freq;
> - unsigned int transition_latency; /* in 10^(-9) s = nanoseconds */
> -};
> -
> -struct cpufreq_policy {
> - cpumask_var_t cpus; /* affected CPUs */
> - unsigned int shared_type; /* ANY or ALL affected CPUs
> - should set cpufreq */
> - unsigned int cpu; /* cpu nr of registered CPU */
> - struct cpufreq_cpuinfo cpuinfo;
> -
> - unsigned int min; /* in kHz */
> - unsigned int max; /* in kHz */
> - unsigned int cur; /* in kHz, only needed if cpufreq
> - * governors are used */
> - struct cpufreq_governor *governor;
> -
> - bool_t resume; /* flag for cpufreq 1st run
> - * S3 wakeup, hotplug cpu, etc */
> - s8 turbo; /* tristate flag: 0 for unsupported
> - * -1 for disable, 1 for enabled
> - * See CPUFREQ_TURBO_* below for defines */
> - bool_t aperf_mperf; /* CPU has APERF/MPERF MSRs */
> -};
> -DECLARE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_policy);
> -
> -extern int __cpufreq_set_policy(struct cpufreq_policy *data,
> - struct cpufreq_policy *policy);
> -
> -void cpufreq_cmdline_parse(char *);
> -
> -#define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
> -#define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */
> -#define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */
> -#define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/
> -
> -/******************** cpufreq transition notifiers *******************/
> -
> -struct cpufreq_freqs {
> - unsigned int cpu; /* cpu nr */
> - unsigned int old;
> - unsigned int new;
> - u8 flags; /* flags of cpufreq_driver, see below. */
> -};
> -
> -
> -/*********************************************************************
> - * CPUFREQ GOVERNORS *
> - *********************************************************************/
> -
> -#define CPUFREQ_GOV_START 1
> -#define CPUFREQ_GOV_STOP 2
> -#define CPUFREQ_GOV_LIMITS 3
> -
> -struct cpufreq_governor {
> - char name[CPUFREQ_NAME_LEN];
> - int (*governor)(struct cpufreq_policy *policy,
> - unsigned int event);
> - bool_t (*handle_option)(const char *name, const char *value);
> - struct list_head governor_list;
> -};
> -
> -extern struct cpufreq_governor *cpufreq_opt_governor;
> -extern struct cpufreq_governor cpufreq_gov_dbs;
> -extern struct cpufreq_governor cpufreq_gov_userspace;
> -extern struct cpufreq_governor cpufreq_gov_performance;
> -extern struct cpufreq_governor cpufreq_gov_powersave;
> -
> -extern struct list_head cpufreq_governor_list;
> -
> -extern int cpufreq_register_governor(struct cpufreq_governor *governor);
> -extern struct cpufreq_governor *__find_governor(const char *governor);
> -#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_dbs
> -
> -/* pass a target to the cpufreq driver */
> -extern int __cpufreq_driver_target(struct cpufreq_policy *policy,
> - unsigned int target_freq,
> - unsigned int relation);
> -
> -#define GOV_GETAVG 1
> -#define USR_GETAVG 2
> -extern int cpufreq_driver_getavg(unsigned int cpu, unsigned int flag);
> -
> -#define CPUFREQ_TURBO_DISABLED -1
> -#define CPUFREQ_TURBO_UNSUPPORTED 0
> -#define CPUFREQ_TURBO_ENABLED 1
> -
> -extern int cpufreq_update_turbo(int cpuid, int new_state);
> -extern int cpufreq_get_turbo_status(int cpuid);
> -
> -static __inline__ int
> -__cpufreq_governor(struct cpufreq_policy *policy, unsigned int event)
> -{
> - return policy->governor->governor(policy, event);
> -}
> -
> -
> -/*********************************************************************
> - * CPUFREQ DRIVER INTERFACE *
> - *********************************************************************/
> -
> -#define CPUFREQ_RELATION_L 0 /* lowest frequency at or above target */
> -#define CPUFREQ_RELATION_H 1 /* highest frequency below or at target */
> -
> -struct cpufreq_driver {
> - char name[CPUFREQ_NAME_LEN];
> - int (*init)(struct cpufreq_policy *policy);
> - int (*verify)(struct cpufreq_policy *policy);
> - int (*update)(int cpuid, struct cpufreq_policy *policy);
> - int (*target)(struct cpufreq_policy *policy,
> - unsigned int target_freq,
> - unsigned int relation);
> - unsigned int (*get)(unsigned int cpu);
> - unsigned int (*getavg)(unsigned int cpu, unsigned int flag);
> - int (*exit)(struct cpufreq_policy *policy);
> -};
> -
> -extern struct cpufreq_driver *cpufreq_driver;
> -
> -static __inline__
> -int cpufreq_register_driver(struct cpufreq_driver *driver_data)
> -{
> - if (!driver_data ||
> - !driver_data->init ||
> - !driver_data->exit ||
> - !driver_data->verify ||
> - !driver_data->target)
> - return -EINVAL;
> -
> - if (cpufreq_driver)
> - return -EBUSY;
> -
> - cpufreq_driver = driver_data;
> - return 0;
> -}
> -
> -static __inline__
> -int cpufreq_unregister_driver(struct cpufreq_driver *driver)
> -{
> - if (!cpufreq_driver || (driver != cpufreq_driver))
> - return -EINVAL;
> -
> - cpufreq_driver = NULL;
> - return 0;
> -}
> -
> -static __inline__
> -void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
> - unsigned int min, unsigned int max)
> -{
> - if (policy->min < min)
> - policy->min = min;
> - if (policy->max < min)
> - policy->max = min;
> - if (policy->min > max)
> - policy->min = max;
> - if (policy->max > max)
> - policy->max = max;
> - if (policy->min > policy->max)
> - policy->min = policy->max;
> - return;
> -}
> -
> -
> -/*********************************************************************
> - * FREQUENCY TABLE HELPERS *
> - *********************************************************************/
> -
> -#define CPUFREQ_ENTRY_INVALID ~0
> -#define CPUFREQ_TABLE_END ~1
> -
> -struct cpufreq_frequency_table {
> - unsigned int index; /* any */
> - unsigned int frequency; /* kHz - doesn't need to be in ascending
> - * order */
> -};
> -
> -int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
> - struct cpufreq_frequency_table *table);
> -
> -int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
> - struct cpufreq_frequency_table *table);
> -
> -int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
> - struct cpufreq_frequency_table *table,
> - unsigned int target_freq,
> - unsigned int relation,
> - unsigned int *index);
> -
> -
> -/*********************************************************************
> - * UNIFIED DEBUG HELPERS *
> - *********************************************************************/
> -
> -struct cpu_dbs_info_s {
> - uint64_t prev_cpu_idle;
> - uint64_t prev_cpu_wall;
> - struct cpufreq_policy *cur_policy;
> - struct cpufreq_frequency_table *freq_table;
> - int cpu;
> - unsigned int enable:1;
> - unsigned int stoppable:1;
> - unsigned int turbo_enabled:1;
> -};
> -
> -int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event);
> -int get_cpufreq_ondemand_para(uint32_t *sampling_rate_max,
> - uint32_t *sampling_rate_min,
> - uint32_t *sampling_rate,
> - uint32_t *up_threshold);
> -int write_ondemand_sampling_rate(unsigned int sampling_rate);
> -int write_ondemand_up_threshold(unsigned int up_threshold);
> -
> -int write_userspace_scaling_setspeed(unsigned int cpu, unsigned int freq);
> -
> -void cpufreq_dbs_timer_suspend(void);
> -void cpufreq_dbs_timer_resume(void);
> -
> -#endif /* __XEN_CPUFREQ_PM_H__ */
> diff --git a/xen/include/cpufreq/cpufreq.h b/xen/include/cpufreq/cpufreq.h
> new file mode 100644
> index 0000000..04716f9
> --- /dev/null
> +++ b/xen/include/cpufreq/cpufreq.h
> @@ -0,0 +1,261 @@
> +/*
> + * xen/include/cpufreq/cpufreq.h
> + *
> + * Copyright (C) 2001 Russell King
> + * (C) 2002 - 2003 Dominik Brodowski <linux@brodo.de>
> + *
> + * $Id: cpufreq.h,v 1.36 2003/01/20 17:31:48 db Exp $
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#ifndef __XEN_CPUFREQ_PM_H__
> +#define __XEN_CPUFREQ_PM_H__
> +
> +#include <xen/types.h>
> +#include <xen/list.h>
> +#include <xen/percpu.h>
> +#include <xen/spinlock.h>
> +#include <xen/errno.h>
> +#include <xen/cpumask.h>
> +
> +#include <acpi/cpufreq/processor_perf.h>
> +
> +DECLARE_PER_CPU(spinlock_t, cpufreq_statistic_lock);
> +
> +extern bool_t cpufreq_verbose;
> +
> +struct cpufreq_governor;
> +
> +struct acpi_cpufreq_data {
> + struct processor_performance *acpi_data;
> + struct cpufreq_frequency_table *freq_table;
> + unsigned int arch_cpu_flags;
> +};
> +
> +extern struct acpi_cpufreq_data *cpufreq_drv_data[NR_CPUS];
> +
> +struct cpufreq_cpuinfo {
> + unsigned int max_freq;
> + unsigned int second_max_freq; /* P1 if Turbo Mode is on */
> + unsigned int min_freq;
> + unsigned int transition_latency; /* in 10^(-9) s = nanoseconds */
> +};
> +
> +struct cpufreq_policy {
> + cpumask_var_t cpus; /* affected CPUs */
> + unsigned int shared_type; /* ANY or ALL affected CPUs
> + should set cpufreq */
> + unsigned int cpu; /* cpu nr of registered CPU */
> + struct cpufreq_cpuinfo cpuinfo;
> +
> + unsigned int min; /* in kHz */
> + unsigned int max; /* in kHz */
> + unsigned int cur; /* in kHz, only needed if cpufreq
> + * governors are used */
> + struct cpufreq_governor *governor;
> +
> + bool_t resume; /* flag for cpufreq 1st run
> + * S3 wakeup, hotplug cpu, etc */
> + s8 turbo; /* tristate flag: 0 for unsupported
> + * -1 for disable, 1 for enabled
> + * See CPUFREQ_TURBO_* below for defines */
> + bool_t aperf_mperf; /* CPU has APERF/MPERF MSRs */
> +};
> +DECLARE_PER_CPU(struct cpufreq_policy *, cpufreq_cpu_policy);
> +
> +extern int __cpufreq_set_policy(struct cpufreq_policy *data,
> + struct cpufreq_policy *policy);
> +
> +void cpufreq_cmdline_parse(char *);
> +
> +#define CPUFREQ_SHARED_TYPE_NONE (0) /* None */
> +#define CPUFREQ_SHARED_TYPE_HW (1) /* HW does needed coordination */
> +#define CPUFREQ_SHARED_TYPE_ALL (2) /* All dependent CPUs should set freq */
> +#define CPUFREQ_SHARED_TYPE_ANY (3) /* Freq can be set from any dependent CPU*/
> +
> +/******************** cpufreq transition notifiers *******************/
> +
> +struct cpufreq_freqs {
> + unsigned int cpu; /* cpu nr */
> + unsigned int old;
> + unsigned int new;
> + u8 flags; /* flags of cpufreq_driver, see below. */
> +};
> +
> +
> +/*********************************************************************
> + * CPUFREQ GOVERNORS *
> + *********************************************************************/
> +
> +#define CPUFREQ_GOV_START 1
> +#define CPUFREQ_GOV_STOP 2
> +#define CPUFREQ_GOV_LIMITS 3
> +
> +struct cpufreq_governor {
> + char name[CPUFREQ_NAME_LEN];
> + int (*governor)(struct cpufreq_policy *policy,
> + unsigned int event);
> + bool_t (*handle_option)(const char *name, const char *value);
> + struct list_head governor_list;
> +};
> +
> +extern struct cpufreq_governor *cpufreq_opt_governor;
> +extern struct cpufreq_governor cpufreq_gov_dbs;
> +extern struct cpufreq_governor cpufreq_gov_userspace;
> +extern struct cpufreq_governor cpufreq_gov_performance;
> +extern struct cpufreq_governor cpufreq_gov_powersave;
> +
> +extern struct list_head cpufreq_governor_list;
> +
> +extern int cpufreq_register_governor(struct cpufreq_governor *governor);
> +extern struct cpufreq_governor *__find_governor(const char *governor);
> +#define CPUFREQ_DEFAULT_GOVERNOR &cpufreq_gov_dbs
> +
> +/* pass a target to the cpufreq driver */
> +extern int __cpufreq_driver_target(struct cpufreq_policy *policy,
> + unsigned int target_freq,
> + unsigned int relation);
> +
> +#define GOV_GETAVG 1
> +#define USR_GETAVG 2
> +extern int cpufreq_driver_getavg(unsigned int cpu, unsigned int flag);
> +
> +#define CPUFREQ_TURBO_DISABLED -1
> +#define CPUFREQ_TURBO_UNSUPPORTED 0
> +#define CPUFREQ_TURBO_ENABLED 1
> +
> +extern int cpufreq_update_turbo(int cpuid, int new_state);
> +extern int cpufreq_get_turbo_status(int cpuid);
> +
> +static __inline__ int
> +__cpufreq_governor(struct cpufreq_policy *policy, unsigned int event)
> +{
> + return policy->governor->governor(policy, event);
> +}
> +
> +
> +/*********************************************************************
> + * CPUFREQ DRIVER INTERFACE *
> + *********************************************************************/
> +
> +#define CPUFREQ_RELATION_L 0 /* lowest frequency at or above target */
> +#define CPUFREQ_RELATION_H 1 /* highest frequency below or at target */
> +
> +struct cpufreq_driver {
> + char name[CPUFREQ_NAME_LEN];
> + int (*init)(struct cpufreq_policy *policy);
> + int (*verify)(struct cpufreq_policy *policy);
> + int (*update)(int cpuid, struct cpufreq_policy *policy);
> + int (*target)(struct cpufreq_policy *policy,
> + unsigned int target_freq,
> + unsigned int relation);
> + unsigned int (*get)(unsigned int cpu);
> + unsigned int (*getavg)(unsigned int cpu, unsigned int flag);
> + int (*exit)(struct cpufreq_policy *policy);
> +};
> +
> +extern struct cpufreq_driver *cpufreq_driver;
> +
> +static __inline__
> +int cpufreq_register_driver(struct cpufreq_driver *driver_data)
> +{
> + if (!driver_data ||
> + !driver_data->init ||
> + !driver_data->exit ||
> + !driver_data->verify ||
> + !driver_data->target)
> + return -EINVAL;
> +
> + if (cpufreq_driver)
> + return -EBUSY;
> +
> + cpufreq_driver = driver_data;
> + return 0;
> +}
> +
> +static __inline__
> +int cpufreq_unregister_driver(struct cpufreq_driver *driver)
> +{
> + if (!cpufreq_driver || (driver != cpufreq_driver))
> + return -EINVAL;
> +
> + cpufreq_driver = NULL;
> + return 0;
> +}
> +
> +static __inline__
> +void cpufreq_verify_within_limits(struct cpufreq_policy *policy,
> + unsigned int min, unsigned int max)
> +{
> + if (policy->min < min)
> + policy->min = min;
> + if (policy->max < min)
> + policy->max = min;
> + if (policy->min > max)
> + policy->min = max;
> + if (policy->max > max)
> + policy->max = max;
> + if (policy->min > policy->max)
> + policy->min = policy->max;
> + return;
> +}
> +
> +
> +/*********************************************************************
> + * FREQUENCY TABLE HELPERS *
> + *********************************************************************/
> +
> +#define CPUFREQ_ENTRY_INVALID ~0
> +#define CPUFREQ_TABLE_END ~1
> +
> +struct cpufreq_frequency_table {
> + unsigned int index; /* any */
> + unsigned int frequency; /* kHz - doesn't need to be in ascending
> + * order */
> +};
> +
> +int cpufreq_frequency_table_cpuinfo(struct cpufreq_policy *policy,
> + struct cpufreq_frequency_table *table);
> +
> +int cpufreq_frequency_table_verify(struct cpufreq_policy *policy,
> + struct cpufreq_frequency_table *table);
> +
> +int cpufreq_frequency_table_target(struct cpufreq_policy *policy,
> + struct cpufreq_frequency_table *table,
> + unsigned int target_freq,
> + unsigned int relation,
> + unsigned int *index);
> +
> +
> +/*********************************************************************
> + * UNIFIED DEBUG HELPERS *
> + *********************************************************************/
> +
> +struct cpu_dbs_info_s {
> + uint64_t prev_cpu_idle;
> + uint64_t prev_cpu_wall;
> + struct cpufreq_policy *cur_policy;
> + struct cpufreq_frequency_table *freq_table;
> + int cpu;
> + unsigned int enable:1;
> + unsigned int stoppable:1;
> + unsigned int turbo_enabled:1;
> +};
> +
> +int cpufreq_governor_dbs(struct cpufreq_policy *policy, unsigned int event);
> +int get_cpufreq_ondemand_para(uint32_t *sampling_rate_max,
> + uint32_t *sampling_rate_min,
> + uint32_t *sampling_rate,
> + uint32_t *up_threshold);
> +int write_ondemand_sampling_rate(unsigned int sampling_rate);
> +int write_ondemand_up_threshold(unsigned int up_threshold);
> +
> +int write_userspace_scaling_setspeed(unsigned int cpu, unsigned int freq);
> +
> +void cpufreq_dbs_timer_suspend(void);
> +void cpufreq_dbs_timer_resume(void);
> +
> +#endif /* __XEN_CPUFREQ_PM_H__ */
next prev parent reply other threads:[~2014-10-07 14:22 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-07 14:19 [RFC PATCH 00/13] xen_cpufreq implementation in Xen hypervisor Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 01/13] cpufreq: move cpufreq.h file to the xen/include/cpufreq location Oleksandr Dmytryshyn
2014-10-07 14:22 ` Andrew Cooper [this message]
2014-10-07 14:27 ` Oleksandr Dmytryshyn
2014-10-07 14:35 ` Jan Beulich
2014-10-09 6:04 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 02/13] pm: move processor_perf.h " Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 03/13] pmstat: move pmstat.c file to the xen/drivers/pm location Oleksandr Dmytryshyn
2014-10-07 14:38 ` Jan Beulich
2014-10-09 6:05 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 04/13] cpufreq: use turbo settings only for x86 architecture Oleksandr Dmytryshyn
2014-10-07 14:39 ` Jan Beulich
2014-10-09 6:05 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 05/13] pmstat: make pmstat functions more generalizable Oleksandr Dmytryshyn
2014-10-07 14:40 ` Jan Beulich
2014-10-09 6:06 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 06/13] cpufreq: make cpufreq driver " Oleksandr Dmytryshyn
2014-10-07 14:42 ` Jan Beulich
2014-10-09 6:06 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 07/13] xen/arm: enable cpu hotplug Oleksandr Dmytryshyn
2014-10-07 15:15 ` Julien Grall
2014-10-09 6:07 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 08/13] xen/dts: make the dt_find_property function to be global Oleksandr Dmytryshyn
2014-10-07 15:09 ` Julien Grall
2014-10-09 6:09 ` Oleksandr Dmytryshyn
2014-10-09 11:15 ` Julien Grall
2014-10-09 11:40 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 09/13] arch/arm: create device tree nodes for Dom0 cpufreq cpu driver Oleksandr Dmytryshyn
2014-10-07 15:26 ` Julien Grall
2014-10-09 6:10 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 10/13] xen: arm: implement platform hypercall Oleksandr Dmytryshyn
2014-10-07 15:39 ` Julien Grall
2014-10-09 6:11 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 11/13] cpufreq: add xen-cpufreq driver Oleksandr Dmytryshyn
2014-10-07 14:44 ` Jan Beulich
2014-10-08 13:51 ` Stefano Stabellini
2014-10-10 9:00 ` Jan Beulich
2014-10-10 9:04 ` Stefano Stabellini
2014-10-10 9:39 ` Jan Beulich
2014-10-10 9:39 ` Stefano Stabellini
2014-10-10 9:46 ` Jan Beulich
2014-10-10 9:54 ` Stefano Stabellini
2014-10-10 9:59 ` Ian Campbell
2014-10-10 12:51 ` Jan Beulich
2014-10-10 14:42 ` Stefano Stabellini
2014-10-13 8:56 ` Oleksandr Dmytryshyn
2014-10-13 9:39 ` Jan Beulich
2014-10-13 11:59 ` Oleksandr Dmytryshyn
2014-10-13 12:28 ` Jan Beulich
2014-10-13 13:38 ` Andrii Tseglytskyi
2014-10-13 14:11 ` Jan Beulich
2014-10-13 14:29 ` Andrii Tseglytskyi
2014-10-14 12:20 ` Jan Beulich
2014-10-14 12:39 ` Andrii Tseglytskyi
2014-10-14 12:51 ` Stefano Stabellini
2014-10-14 12:58 ` Andrii Tseglytskyi
2014-10-14 13:00 ` Andrii Tseglytskyi
2014-10-14 13:05 ` Ian Campbell
2014-10-14 13:07 ` Andrii Tseglytskyi
2014-10-15 10:55 ` Stefano Stabellini
2014-10-15 11:17 ` Andrii Tseglytskyi
2014-10-15 12:34 ` Ian Campbell
2014-10-15 16:26 ` Jan Beulich
2014-10-10 15:19 ` Ian Campbell
2014-10-10 10:40 ` Jan Beulich
2014-10-09 6:13 ` Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 12/13] xen: arm: implement XEN_SYSCTL_cpufreq_op Oleksandr Dmytryshyn
2014-10-07 14:19 ` [RFC PATCH 13/13] xen/arm: enable cpufreq functionality for ARM Oleksandr Dmytryshyn
2014-10-07 14:34 ` [RFC PATCH 00/13] xen_cpufreq implementation in Xen hypervisor Jan Beulich
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5433F717.1040106@citrix.com \
--to=andrew.cooper3@citrix.com \
--cc=ian.campbell@citrix.com \
--cc=oleksandr.dmytryshyn@globallogic.com \
--cc=stefano.stabellini@citrix.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.