* [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions
@ 2022-07-26 14:59 Jeremy Linton
2022-07-26 18:31 ` Rafael J. Wysocki
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Jeremy Linton @ 2022-07-26 14:59 UTC (permalink / raw)
To: linux-pm
Cc: rafael, lenb, viresh.kumar, robert.moore, devel, linux-acpi,
linux-kernel, Jeremy Linton
PCC regions utilize a mailbox to set/retrieve register values used by
the CPPC code. This is fine as long as the operations are
infrequent. With the FIE code enabled though the overhead can range
from 2-11% of system CPU overhead (ex: as measured by top) on Arm
based machines.
So, before enabling FIE assure none of the registers used by
cppc_get_perf_ctrs() are in the PCC region. Furthermore lets also
enable a module parameter which can also disable it at boot or module
reload.
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
---
drivers/acpi/cppc_acpi.c | 31 +++++++++++++++++++++++++++++++
drivers/cpufreq/cppc_cpufreq.c | 19 +++++++++++++++----
include/acpi/cppc_acpi.h | 5 +++++
3 files changed, 51 insertions(+), 4 deletions(-)
diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
index 3c6d4ef87be0..ad84c55b6409 100644
--- a/drivers/acpi/cppc_acpi.c
+++ b/drivers/acpi/cppc_acpi.c
@@ -1246,6 +1246,37 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps)
}
EXPORT_SYMBOL_GPL(cppc_get_perf_caps);
+int cppc_perf_ctrs_in_pcc(void)
+{
+ int cpu;
+ struct cpc_desc *cpc_desc;
+ struct cpc_register_resource *delivered_reg, *reference_reg,
+ *ref_perf_reg, *ctr_wrap_reg;
+
+ for_each_present_cpu(cpu) {
+ cpc_desc = per_cpu(cpc_desc_ptr, cpu);
+ delivered_reg = &cpc_desc->cpc_regs[DELIVERED_CTR];
+ reference_reg = &cpc_desc->cpc_regs[REFERENCE_CTR];
+ ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF];
+ ctr_wrap_reg = &cpc_desc->cpc_regs[CTR_WRAP_TIME];
+
+ /*
+ * If reference perf register is not supported then we should
+ * use the nominal perf value
+ */
+ if (!CPC_SUPPORTED(ref_perf_reg))
+ ref_perf_reg = &cpc_desc->cpc_regs[NOMINAL_PERF];
+
+ /* Are any of the regs PCC ?*/
+ if (CPC_IN_PCC(delivered_reg) || CPC_IN_PCC(reference_reg) ||
+ CPC_IN_PCC(ctr_wrap_reg) || CPC_IN_PCC(ref_perf_reg)) {
+ return true;
+ }
+ }
+ return false;
+}
+EXPORT_SYMBOL_GPL(cppc_perf_ctrs_in_pcc);
+
/**
* cppc_get_perf_ctrs - Read a CPU's performance feedback counters.
* @cpunum: CPU from which to read counters.
diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c
index 24eaf0ec344d..a66d3013d0f8 100644
--- a/drivers/cpufreq/cppc_cpufreq.c
+++ b/drivers/cpufreq/cppc_cpufreq.c
@@ -63,6 +63,10 @@ static struct cppc_workaround_oem_info wa_info[] = {
static struct cpufreq_driver cppc_cpufreq_driver;
+static bool fie_disabled;
+module_param(fie_disabled, bool, 0444);
+MODULE_PARM_DESC(fie_disabled, "Disable Frequency Invariance Engine (FIE)");
+
#ifdef CONFIG_ACPI_CPPC_CPUFREQ_FIE
/* Frequency invariance support */
@@ -158,7 +162,7 @@ static void cppc_cpufreq_cpu_fie_init(struct cpufreq_policy *policy)
struct cppc_freq_invariance *cppc_fi;
int cpu, ret;
- if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
+ if (fie_disabled)
return;
for_each_cpu(cpu, policy->cpus) {
@@ -199,7 +203,7 @@ static void cppc_cpufreq_cpu_fie_exit(struct cpufreq_policy *policy)
struct cppc_freq_invariance *cppc_fi;
int cpu;
- if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
+ if (fie_disabled)
return;
/* policy->cpus will be empty here, use related_cpus instead */
@@ -229,7 +233,12 @@ static void __init cppc_freq_invariance_init(void)
};
int ret;
- if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
+ if (cppc_perf_ctrs_in_pcc()) {
+ pr_debug("FIE not enabled on systems with registers in PCC\n");
+ fie_disabled = true;
+ }
+
+ if (fie_disabled)
return;
kworker_fie = kthread_create_worker(0, "cppc_fie");
@@ -247,7 +256,7 @@ static void __init cppc_freq_invariance_init(void)
static void cppc_freq_invariance_exit(void)
{
- if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
+ if (fie_disabled)
return;
kthread_destroy_worker(kworker_fie);
@@ -940,6 +949,8 @@ static void cppc_check_hisi_workaround(void)
}
}
+ fie_disabled = true;
+
acpi_put_table(tbl);
}
diff --git a/include/acpi/cppc_acpi.h b/include/acpi/cppc_acpi.h
index d389bab54241..f4ff571fcdcb 100644
--- a/include/acpi/cppc_acpi.h
+++ b/include/acpi/cppc_acpi.h
@@ -140,6 +140,7 @@ extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
extern int cppc_set_enable(int cpu, bool enable);
extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
+extern int cppc_perf_ctrs_in_pcc(void);
extern bool acpi_cpc_valid(void);
extern bool cppc_allow_fast_switch(void);
extern int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data);
@@ -173,6 +174,10 @@ static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps)
{
return -ENOTSUPP;
}
+extern int cppc_perf_ctrs_in_pcc(void)
+{
+ return false;
+}
static inline bool acpi_cpc_valid(void)
{
return false;
--
2.37.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions
2022-07-26 14:59 [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions Jeremy Linton
@ 2022-07-26 18:31 ` Rafael J. Wysocki
2022-07-27 3:39 ` kernel test robot
2022-07-29 2:55 ` kernel test robot
2 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2022-07-26 18:31 UTC (permalink / raw)
To: Jeremy Linton
Cc: Linux PM, Rafael J. Wysocki, Len Brown, Viresh Kumar,
Robert Moore, open list:ACPI COMPONENT ARCHITECTURE (ACPICA),
ACPI Devel Maling List, Linux Kernel Mailing List
On Tue, Jul 26, 2022 at 5:00 PM Jeremy Linton <jeremy.linton@arm.com> wrote:
>
> PCC regions utilize a mailbox to set/retrieve register values used by
> the CPPC code. This is fine as long as the operations are
> infrequent. With the FIE code enabled though the overhead can range
> from 2-11% of system CPU overhead (ex: as measured by top) on Arm
> based machines.
>
> So, before enabling FIE assure none of the registers used by
> cppc_get_perf_ctrs() are in the PCC region. Furthermore lets also
> enable a module parameter which can also disable it at boot or module
> reload.
>
> Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
> ---
> drivers/acpi/cppc_acpi.c | 31 +++++++++++++++++++++++++++++++
> drivers/cpufreq/cppc_cpufreq.c | 19 +++++++++++++++----
> include/acpi/cppc_acpi.h | 5 +++++
> 3 files changed, 51 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/cppc_acpi.c b/drivers/acpi/cppc_acpi.c
> index 3c6d4ef87be0..ad84c55b6409 100644
> --- a/drivers/acpi/cppc_acpi.c
> +++ b/drivers/acpi/cppc_acpi.c
> @@ -1246,6 +1246,37 @@ int cppc_get_perf_caps(int cpunum, struct cppc_perf_caps *perf_caps)
> }
> EXPORT_SYMBOL_GPL(cppc_get_perf_caps);
>
A kerneldoc, please.
> +int cppc_perf_ctrs_in_pcc(void)
Why int and not bool?
> +{
> + int cpu;
> + struct cpc_desc *cpc_desc;
> + struct cpc_register_resource *delivered_reg, *reference_reg,
> + *ref_perf_reg, *ctr_wrap_reg;
No line wraps here, please and follow the reverse xmas tree convention.
> +
> + for_each_present_cpu(cpu) {
Declare the variables only used in this loop here and you only need two.
> + cpc_desc = per_cpu(cpc_desc_ptr, cpu);
> + delivered_reg = &cpc_desc->cpc_regs[DELIVERED_CTR];
> + reference_reg = &cpc_desc->cpc_regs[REFERENCE_CTR];
> + ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF];
> + ctr_wrap_reg = &cpc_desc->cpc_regs[CTR_WRAP_TIME];
I would do
if (CPC_IN_PCC(&cpc_desc->cpc_regs[DELIVERED_CTR]) ||
CPC_IN_PCC(&cpc_desc->cpc_regs[REFERENCE_CTR]) ||
CPC_IN_PCC(&cpc_desc->cpc_regs[CTR_WRAP_TIME]))
return true;
ref_perf_reg = &cpc_desc->cpc_regs[REFERENCE_PERF];
if (!CPC_SUPPORTED(ref_perf_reg))
ref_perf_reg = &cpc_desc->cpc_regs[NOMINAL_PERF];
if (CPC_IN_PCC(ref_perf_reg))
return true;
> +
> + /*
> + * If reference perf register is not supported then we should
> + * use the nominal perf value
> + */
> + if (!CPC_SUPPORTED(ref_perf_reg))
> + ref_perf_reg = &cpc_desc->cpc_regs[NOMINAL_PERF];
> +
> + /* Are any of the regs PCC ?*/
> + if (CPC_IN_PCC(delivered_reg) || CPC_IN_PCC(reference_reg) ||
> + CPC_IN_PCC(ctr_wrap_reg) || CPC_IN_PCC(ref_perf_reg)) {
> + return true;
> + }
> + }
> + return false;
> +}
> +EXPORT_SYMBOL_GPL(cppc_perf_ctrs_in_pcc);
> +
> /**
> * cppc_get_perf_ctrs - Read a CPU's performance feedback counters.
> * @cpunum: CPU from which to read counters.
> diff --git a/drivers/cpufreq/cppc_cpufreq.c b/drivers/cpufreq/cppc_cpufreq.c
> index 24eaf0ec344d..a66d3013d0f8 100644
> --- a/drivers/cpufreq/cppc_cpufreq.c
> +++ b/drivers/cpufreq/cppc_cpufreq.c
> @@ -63,6 +63,10 @@ static struct cppc_workaround_oem_info wa_info[] = {
>
> static struct cpufreq_driver cppc_cpufreq_driver;
>
> +static bool fie_disabled;
> +module_param(fie_disabled, bool, 0444);
> +MODULE_PARM_DESC(fie_disabled, "Disable Frequency Invariance Engine (FIE)");
> +
> #ifdef CONFIG_ACPI_CPPC_CPUFREQ_FIE
>
> /* Frequency invariance support */
> @@ -158,7 +162,7 @@ static void cppc_cpufreq_cpu_fie_init(struct cpufreq_policy *policy)
> struct cppc_freq_invariance *cppc_fi;
> int cpu, ret;
>
> - if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
> + if (fie_disabled)
> return;
>
> for_each_cpu(cpu, policy->cpus) {
> @@ -199,7 +203,7 @@ static void cppc_cpufreq_cpu_fie_exit(struct cpufreq_policy *policy)
> struct cppc_freq_invariance *cppc_fi;
> int cpu;
>
> - if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
> + if (fie_disabled)
> return;
>
> /* policy->cpus will be empty here, use related_cpus instead */
> @@ -229,7 +233,12 @@ static void __init cppc_freq_invariance_init(void)
> };
> int ret;
>
> - if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
> + if (cppc_perf_ctrs_in_pcc()) {
> + pr_debug("FIE not enabled on systems with registers in PCC\n");
> + fie_disabled = true;
> + }
> +
> + if (fie_disabled)
> return;
>
> kworker_fie = kthread_create_worker(0, "cppc_fie");
> @@ -247,7 +256,7 @@ static void __init cppc_freq_invariance_init(void)
>
> static void cppc_freq_invariance_exit(void)
> {
> - if (cppc_cpufreq_driver.get == hisi_cppc_cpufreq_get_rate)
> + if (fie_disabled)
> return;
>
> kthread_destroy_worker(kworker_fie);
> @@ -940,6 +949,8 @@ static void cppc_check_hisi_workaround(void)
> }
> }
>
> + fie_disabled = true;
> +
> acpi_put_table(tbl);
> }
>
> diff --git a/include/acpi/cppc_acpi.h b/include/acpi/cppc_acpi.h
> index d389bab54241..f4ff571fcdcb 100644
> --- a/include/acpi/cppc_acpi.h
> +++ b/include/acpi/cppc_acpi.h
> @@ -140,6 +140,7 @@ extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
> extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
> extern int cppc_set_enable(int cpu, bool enable);
> extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
> +extern int cppc_perf_ctrs_in_pcc(void);
> extern bool acpi_cpc_valid(void);
> extern bool cppc_allow_fast_switch(void);
> extern int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data);
> @@ -173,6 +174,10 @@ static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps)
> {
> return -ENOTSUPP;
> }
> +extern int cppc_perf_ctrs_in_pcc(void)
> +{
> + return false;
> +}
> static inline bool acpi_cpc_valid(void)
> {
> return false;
> --
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions
2022-07-26 14:59 [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions Jeremy Linton
2022-07-26 18:31 ` Rafael J. Wysocki
@ 2022-07-27 3:39 ` kernel test robot
2022-07-29 2:55 ` kernel test robot
2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2022-07-27 3:39 UTC (permalink / raw)
To: Jeremy Linton, linux-pm
Cc: llvm, kbuild-all, rafael, lenb, viresh.kumar, robert.moore,
devel, linux-acpi, linux-kernel, Jeremy Linton
Hi Jeremy,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on rafael-pm/linux-next]
[also build test WARNING on linus/master v5.19-rc8 next-20220726]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Jeremy-Linton/ACPI-CPPC-Disable-FIE-if-registers-in-PCC-regions/20220726-230217
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
config: x86_64-randconfig-a005 (https://download.01.org/0day-ci/archive/20220727/202207271136.DESdyKRY-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 83882606dbd7ffb0bdd3460356202d97705809c8)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/a4dd80cfc857eef429f60e999bdc9479179d495e
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Jeremy-Linton/ACPI-CPPC-Disable-FIE-if-registers-in-PCC-regions/20220726-230217
git checkout a4dd80cfc857eef429f60e999bdc9479179d495e
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash drivers/cpufreq/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In file included from drivers/cpufreq/intel_pstate.c:45:
>> include/acpi/cppc_acpi.h:177:12: warning: no previous prototype for function 'cppc_perf_ctrs_in_pcc' [-Wmissing-prototypes]
extern int cppc_perf_ctrs_in_pcc(void)
^
include/acpi/cppc_acpi.h:177:8: note: declare 'static' if the function is not intended to be used outside of this translation unit
extern int cppc_perf_ctrs_in_pcc(void)
^
1 warning generated.
vim +/cppc_perf_ctrs_in_pcc +177 include/acpi/cppc_acpi.h
135
136 #ifdef CONFIG_ACPI_CPPC_LIB
137 extern int cppc_get_desired_perf(int cpunum, u64 *desired_perf);
138 extern int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf);
139 extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
140 extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
141 extern int cppc_set_enable(int cpu, bool enable);
142 extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
143 extern int cppc_perf_ctrs_in_pcc(void);
144 extern bool acpi_cpc_valid(void);
145 extern bool cppc_allow_fast_switch(void);
146 extern int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data);
147 extern unsigned int cppc_get_transition_latency(int cpu);
148 extern bool cpc_ffh_supported(void);
149 extern bool cpc_supported_by_cpu(void);
150 extern int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val);
151 extern int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val);
152 #else /* !CONFIG_ACPI_CPPC_LIB */
153 static inline int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
154 {
155 return -ENOTSUPP;
156 }
157 static inline int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf)
158 {
159 return -ENOTSUPP;
160 }
161 static inline int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs)
162 {
163 return -ENOTSUPP;
164 }
165 static inline int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
166 {
167 return -ENOTSUPP;
168 }
169 static inline int cppc_set_enable(int cpu, bool enable)
170 {
171 return -ENOTSUPP;
172 }
173 static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps)
174 {
175 return -ENOTSUPP;
176 }
> 177 extern int cppc_perf_ctrs_in_pcc(void)
178 {
179 return false;
180 }
181 static inline bool acpi_cpc_valid(void)
182 {
183 return false;
184 }
185 static inline bool cppc_allow_fast_switch(void)
186 {
187 return false;
188 }
189 static inline unsigned int cppc_get_transition_latency(int cpu)
190 {
191 return CPUFREQ_ETERNAL;
192 }
193 static inline bool cpc_ffh_supported(void)
194 {
195 return false;
196 }
197 static inline int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val)
198 {
199 return -ENOTSUPP;
200 }
201 static inline int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val)
202 {
203 return -ENOTSUPP;
204 }
205 #endif /* !CONFIG_ACPI_CPPC_LIB */
206
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions
2022-07-26 14:59 [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions Jeremy Linton
2022-07-26 18:31 ` Rafael J. Wysocki
2022-07-27 3:39 ` kernel test robot
@ 2022-07-29 2:55 ` kernel test robot
2 siblings, 0 replies; 4+ messages in thread
From: kernel test robot @ 2022-07-29 2:55 UTC (permalink / raw)
To: Jeremy Linton, linux-pm
Cc: kbuild-all, rafael, lenb, viresh.kumar, robert.moore, devel,
linux-acpi, linux-kernel, Jeremy Linton
Hi Jeremy,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on rafael-pm/linux-next]
[also build test ERROR on linus/master v5.19-rc8 next-20220728]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Jeremy-Linton/ACPI-CPPC-Disable-FIE-if-registers-in-PCC-regions/20220726-230217
base: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
config: x86_64-randconfig-a011 (https://download.01.org/0day-ci/archive/20220729/202207291003.Wk3c06eH-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce (this is a W=1 build):
# https://github.com/intel-lab-lkp/linux/commit/a4dd80cfc857eef429f60e999bdc9479179d495e
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Jeremy-Linton/ACPI-CPPC-Disable-FIE-if-registers-in-PCC-regions/20220726-230217
git checkout a4dd80cfc857eef429f60e999bdc9479179d495e
# save the config file
mkdir build_dir && cp config build_dir/.config
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
In file included from drivers/cpufreq/acpi-cpufreq.c:29:
>> include/acpi/cppc_acpi.h:177:12: warning: no previous prototype for 'cppc_perf_ctrs_in_pcc' [-Wmissing-prototypes]
177 | extern int cppc_perf_ctrs_in_pcc(void)
| ^~~~~~~~~~~~~~~~~~~~~
--
ld: drivers/cpufreq/intel_pstate.o: in function `cppc_perf_ctrs_in_pcc':
>> include/acpi/cppc_acpi.h:178: multiple definition of `cppc_perf_ctrs_in_pcc'; drivers/cpufreq/acpi-cpufreq.o:include/acpi/cppc_acpi.h:178: first defined here
vim +178 include/acpi/cppc_acpi.h
135
136 #ifdef CONFIG_ACPI_CPPC_LIB
137 extern int cppc_get_desired_perf(int cpunum, u64 *desired_perf);
138 extern int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf);
139 extern int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs);
140 extern int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls);
141 extern int cppc_set_enable(int cpu, bool enable);
142 extern int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps);
143 extern int cppc_perf_ctrs_in_pcc(void);
144 extern bool acpi_cpc_valid(void);
145 extern bool cppc_allow_fast_switch(void);
146 extern int acpi_get_psd_map(unsigned int cpu, struct cppc_cpudata *cpu_data);
147 extern unsigned int cppc_get_transition_latency(int cpu);
148 extern bool cpc_ffh_supported(void);
149 extern bool cpc_supported_by_cpu(void);
150 extern int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val);
151 extern int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val);
152 #else /* !CONFIG_ACPI_CPPC_LIB */
153 static inline int cppc_get_desired_perf(int cpunum, u64 *desired_perf)
154 {
155 return -ENOTSUPP;
156 }
157 static inline int cppc_get_nominal_perf(int cpunum, u64 *nominal_perf)
158 {
159 return -ENOTSUPP;
160 }
161 static inline int cppc_get_perf_ctrs(int cpu, struct cppc_perf_fb_ctrs *perf_fb_ctrs)
162 {
163 return -ENOTSUPP;
164 }
165 static inline int cppc_set_perf(int cpu, struct cppc_perf_ctrls *perf_ctrls)
166 {
167 return -ENOTSUPP;
168 }
169 static inline int cppc_set_enable(int cpu, bool enable)
170 {
171 return -ENOTSUPP;
172 }
173 static inline int cppc_get_perf_caps(int cpu, struct cppc_perf_caps *caps)
174 {
175 return -ENOTSUPP;
176 }
> 177 extern int cppc_perf_ctrs_in_pcc(void)
> 178 {
179 return false;
180 }
181 static inline bool acpi_cpc_valid(void)
182 {
183 return false;
184 }
185 static inline bool cppc_allow_fast_switch(void)
186 {
187 return false;
188 }
189 static inline unsigned int cppc_get_transition_latency(int cpu)
190 {
191 return CPUFREQ_ETERNAL;
192 }
193 static inline bool cpc_ffh_supported(void)
194 {
195 return false;
196 }
197 static inline int cpc_read_ffh(int cpunum, struct cpc_reg *reg, u64 *val)
198 {
199 return -ENOTSUPP;
200 }
201 static inline int cpc_write_ffh(int cpunum, struct cpc_reg *reg, u64 val)
202 {
203 return -ENOTSUPP;
204 }
205 #endif /* !CONFIG_ACPI_CPPC_LIB */
206
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-07-29 2:56 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-26 14:59 [PATCH] ACPI: CPPC: Disable FIE if registers in PCC regions Jeremy Linton
2022-07-26 18:31 ` Rafael J. Wysocki
2022-07-27 3:39 ` kernel test robot
2022-07-29 2:55 ` kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).