Message ID | 20201027163624.20747-2-ionela.voinescu@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | arm64: cppc: add FFH support using AMUs | expand |
Hi Ionela,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on 3650b228f83adda7e5ee532e2b90429c03f7b9ec]
url: https://github.com/0day-ci/linux/commits/Ionela-Voinescu/arm64-cppc-add-FFH-support-using-AMUs/20201028-004534
base: 3650b228f83adda7e5ee532e2b90429c03f7b9ec
config: arm64-randconfig-r001-20201028 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 50dfa19cc799ae7cddd39a95dbfce675a12672ad)
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
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/bcdb8bb7da562e2438f66eeb357a724c6484e6bb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ionela-Voinescu/arm64-cppc-add-FFH-support-using-AMUs/20201028-004534
git checkout bcdb8bb7da562e2438f66eeb357a724c6484e6bb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> arch/arm64/kernel/topology.c:281:6: warning: no previous prototype for function 'topology_scale_freq_tick' [-Wmissing-prototypes]
void topology_scale_freq_tick(void)
^
arch/arm64/kernel/topology.c:281:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
void topology_scale_freq_tick(void)
^
static
arch/arm64/kernel/topology.c:140:1: warning: unused function 'store_corecnt' [-Wunused-function]
COUNTER_READ_STORE(corecnt, 0);
^
arch/arm64/kernel/topology.c:131:20: note: expanded from macro 'COUNTER_READ_STORE'
static inline void store_##NAME(void *val) \
^
<scratch space>:206:1: note: expanded from here
store_corecnt
^
arch/arm64/kernel/topology.c:141:1: warning: unused function 'store_constcnt' [-Wunused-function]
COUNTER_READ_STORE(constcnt, 0);
^
arch/arm64/kernel/topology.c:131:20: note: expanded from macro 'COUNTER_READ_STORE'
static inline void store_##NAME(void *val) \
^
<scratch space>:209:1: note: expanded from here
store_constcnt
^
3 warnings generated.
vim +/topology_scale_freq_tick +281 arch/arm64/kernel/topology.c
cd0ed03a8903a0b Ionela Voinescu 2020-03-05 280
cd0ed03a8903a0b Ionela Voinescu 2020-03-05 @281 void topology_scale_freq_tick(void)
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
Hi Ionela,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on 3650b228f83adda7e5ee532e2b90429c03f7b9ec]
url: https://github.com/0day-ci/linux/commits/Ionela-Voinescu/arm64-cppc-add-FFH-support-using-AMUs/20201028-004534
base: 3650b228f83adda7e5ee532e2b90429c03f7b9ec
config: arm64-randconfig-r031-20201030 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
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/0day-ci/linux/commit/bcdb8bb7da562e2438f66eeb357a724c6484e6bb
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Ionela-Voinescu/arm64-cppc-add-FFH-support-using-AMUs/20201028-004534
git checkout bcdb8bb7da562e2438f66eeb357a724c6484e6bb
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=arm64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> arch/arm64/kernel/topology.c:281:6: warning: no previous prototype for 'topology_scale_freq_tick' [-Wmissing-prototypes]
281 | void topology_scale_freq_tick(void)
| ^~~~~~~~~~~~~~~~~~~~~~~~
vim +/topology_scale_freq_tick +281 arch/arm64/kernel/topology.c
cd0ed03a8903a0b Ionela Voinescu 2020-03-05 280
cd0ed03a8903a0b Ionela Voinescu 2020-03-05 @281 void topology_scale_freq_tick(void)
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/arch/arm64/include/asm/cpufeature.h b/arch/arm64/include/asm/cpufeature.h index f7e7144af174..42187f424e11 100644 --- a/arch/arm64/include/asm/cpufeature.h +++ b/arch/arm64/include/asm/cpufeature.h @@ -743,6 +743,11 @@ static inline bool cpu_has_hw_af(void) #ifdef CONFIG_ARM64_AMU_EXTN /* Check whether the cpu supports the Activity Monitors Unit (AMU) */ extern bool cpu_has_amu_feat(int cpu); +#else +static inline bool cpu_has_amu_feat(int cpu) +{ + return false; +} #endif static inline unsigned int get_vmid_bits(u64 mmfr1) diff --git a/arch/arm64/include/asm/topology.h b/arch/arm64/include/asm/topology.h index 11a465243f66..7c4fa4b07a77 100644 --- a/arch/arm64/include/asm/topology.h +++ b/arch/arm64/include/asm/topology.h @@ -16,6 +16,8 @@ int pcibus_to_node(struct pci_bus *bus); #include <linux/arch_topology.h> +void update_freq_counters_refs(void); + #ifdef CONFIG_ARM64_AMU_EXTN /* * Replace task scheduler's default counter-based diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c index dcc165b3fc04..1142970e985b 100644 --- a/arch/arm64/kernel/cpufeature.c +++ b/arch/arm64/kernel/cpufeature.c @@ -1526,16 +1526,13 @@ bool cpu_has_amu_feat(int cpu) return cpumask_test_cpu(cpu, &amu_cpus); } -/* Initialize the use of AMU counters for frequency invariance */ -extern void init_cpu_freq_invariance_counters(void); - static void cpu_amu_enable(struct arm64_cpu_capabilities const *cap) { if (has_cpuid_feature(cap, SCOPE_LOCAL_CPU)) { pr_info("detected CPU%d: Activity Monitors Unit (AMU)\n", smp_processor_id()); cpumask_set_cpu(smp_processor_id(), &amu_cpus); - init_cpu_freq_invariance_counters(); + update_freq_counters_refs(); } } diff --git a/arch/arm64/kernel/topology.c b/arch/arm64/kernel/topology.c index 543c67cae02f..db03c440e157 100644 --- a/arch/arm64/kernel/topology.c +++ b/arch/arm64/kernel/topology.c @@ -123,23 +123,33 @@ int __init parse_acpi_topology(void) } #endif -#ifdef CONFIG_ARM64_AMU_EXTN +#define COUNTER_READ_STORE(NAME, VAL) \ +static inline u64 read_##NAME(void) \ +{ \ + return VAL; \ +} \ +static inline void store_##NAME(void *val) \ +{ \ + *(u64 *)val = read_##NAME(); \ +} -#undef pr_fmt -#define pr_fmt(fmt) "AMU: " fmt +#ifdef CONFIG_ARM64_AMU_EXTN +COUNTER_READ_STORE(corecnt, read_sysreg_s(SYS_AMEVCNTR0_CORE_EL0)); +COUNTER_READ_STORE(constcnt, read_sysreg_s(SYS_AMEVCNTR0_CONST_EL0)); +#else +COUNTER_READ_STORE(corecnt, 0); +COUNTER_READ_STORE(constcnt, 0); +#endif static DEFINE_PER_CPU_READ_MOSTLY(unsigned long, arch_max_freq_scale); static DEFINE_PER_CPU(u64, arch_const_cycles_prev); static DEFINE_PER_CPU(u64, arch_core_cycles_prev); static cpumask_var_t amu_fie_cpus; -/* Initialize counter reference per-cpu variables for the current CPU */ -void init_cpu_freq_invariance_counters(void) +void update_freq_counters_refs(void) { - this_cpu_write(arch_core_cycles_prev, - read_sysreg_s(SYS_AMEVCNTR0_CORE_EL0)); - this_cpu_write(arch_const_cycles_prev, - read_sysreg_s(SYS_AMEVCNTR0_CONST_EL0)); + this_cpu_write(arch_core_cycles_prev, read_corecnt()); + this_cpu_write(arch_const_cycles_prev, read_constcnt()); } static int validate_cpu_freq_invariance_counters(int cpu) @@ -280,11 +290,14 @@ void topology_scale_freq_tick(void) if (!cpumask_test_cpu(cpu, amu_fie_cpus)) return; - const_cnt = read_sysreg_s(SYS_AMEVCNTR0_CONST_EL0); - core_cnt = read_sysreg_s(SYS_AMEVCNTR0_CORE_EL0); prev_const_cnt = this_cpu_read(arch_const_cycles_prev); prev_core_cnt = this_cpu_read(arch_core_cycles_prev); + update_freq_counters_refs(); + + const_cnt = this_cpu_read(arch_const_cycles_prev); + core_cnt = this_cpu_read(arch_core_cycles_prev); + if (unlikely(core_cnt <= prev_core_cnt || const_cnt <= prev_const_cnt)) goto store_and_exit; @@ -309,4 +322,3 @@ void topology_scale_freq_tick(void) this_cpu_write(arch_core_cycles_prev, core_cnt); this_cpu_write(arch_const_cycles_prev, const_cnt); } -#endif /* CONFIG_ARM64_AMU_EXTN */
In preparation for other uses of Activity Monitors (AMU) cycle counters, place counter read functionality in generic functions that can reused: read_corecnt() and read_constcnt(). As a result, implement update_freq_counters_refs() to replace init_cpu_freq_invariance_counters() and both initialise and update the per-cpu reference variables. Signed-off-by: Ionela Voinescu <ionela.voinescu@arm.com> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will@kernel.org> --- arch/arm64/include/asm/cpufeature.h | 5 ++++ arch/arm64/include/asm/topology.h | 2 ++ arch/arm64/kernel/cpufeature.c | 5 +--- arch/arm64/kernel/topology.c | 36 +++++++++++++++++++---------- 4 files changed, 32 insertions(+), 16 deletions(-)