From 0bd484923f72189800ef967284a2c1351650a1cb Mon Sep 17 00:00:00 2001 From: Song Xue Date: Thu, 30 Nov 2023 16:06:24 +0800 Subject: [PATCH] sched: walt: Add judgement for reading sysreg on AMU when reading sysreg on AMU, we should not only judge the enablemnt of config, but also need be careful on the amu implementation of target cpu. Change-Id: Ifa00211c5aa673e83a300cdbbb7c346ed667de7d Signed-off-by: Song Xue --- kernel/sched/walt/perf_trace_counters.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/kernel/sched/walt/perf_trace_counters.h b/kernel/sched/walt/perf_trace_counters.h index deb815d1f5a1..1d86966f0fe3 100644 --- a/kernel/sched/walt/perf_trace_counters.h +++ b/kernel/sched/walt/perf_trace_counters.h @@ -59,6 +59,10 @@ static inline long __trace_sched_switch_state(bool preempt, struct task_struct * } #endif /* CREATE_TRACE_POINTS */ +/* Check the AMU bits to judge AMU implementation in ID_AA64PFR0_EL1 */ +#define cpu_has_amu \ + cpuid_feature_extract_unsigned_field(read_cpuid(ID_AA64PFR0_EL1), ID_AA64PFR0_EL1_AMU_SHIFT) + TRACE_EVENT(sched_switch_with_ctrs, TP_PROTO(bool preempt, @@ -125,7 +129,7 @@ TRACE_EVENT(sched_switch_with_ctrs, delta_l1_cnts[i] = 0; } - if (IS_ENABLED(CONFIG_ARM64_AMU_EXTN)) { + if (IS_ENABLED(CONFIG_ARM64_AMU_EXTN) && cpu_has_amu > 0) { amu_cnt = read_sysreg_s(SYS_AMEVCNTR0_CORE_EL0); delta_amu_cnts[0] = amu_cnt - per_cpu(previous_amu_cnts[0], cpu);