From b8e1231d5f78314de8f9066baba7b1fdd5e59218 Mon Sep 17 00:00:00 2001 From: Dhananjay Ugwekar Date: Fri, 13 Sep 2024 15:21:42 +0000 Subject: perf/x86/rapl: Remove the cpu_to_rapl_pmu() function Preparation for the addition of per-core RAPL energy counter support for AMD CPUs. Post which, one cpu might be mapped to more than one rapl_pmu (package/die one or per-core one), also makes sense to use the get_rapl_pmu_idx macro which is anyway used to index into the rapl_pmus->pmus[] array. Signed-off-by: Dhananjay Ugwekar --- arch/x86/events/rapl.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) --- a/arch/x86/events/rapl.c +++ b/arch/x86/events/rapl.c @@ -162,17 +162,6 @@ static inline unsigned int get_rapl_pmu_ topology_logical_die_id(cpu); } -static inline struct rapl_pmu *cpu_to_rapl_pmu(unsigned int cpu) -{ - unsigned int rapl_pmu_idx = get_rapl_pmu_idx(cpu); - - /* - * The unsigned check also catches the '-1' return value for non - * existent mappings in the topology map. - */ - return rapl_pmu_idx < rapl_pmus->nr_rapl_pmu ? rapl_pmus->pmus[rapl_pmu_idx] : NULL; -} - static inline u64 rapl_read_counter(struct perf_event *event) { u64 raw; @@ -348,7 +337,7 @@ static void rapl_pmu_event_del(struct pe static int rapl_pmu_event_init(struct perf_event *event) { u64 cfg = event->attr.config & RAPL_EVENT_MASK; - int bit, ret = 0; + int bit, rapl_pmu_idx, ret = 0; struct rapl_pmu *pmu; /* only look at RAPL events */ @@ -376,8 +365,12 @@ static int rapl_pmu_event_init(struct pe if (event->attr.sample_period) /* no sampling */ return -EINVAL; + rapl_pmu_idx = get_rapl_pmu_idx(event->cpu); + if (rapl_pmu_idx >= rapl_pmus->nr_rapl_pmu) + return -EINVAL; + /* must be done before validate_group */ - pmu = cpu_to_rapl_pmu(event->cpu); + pmu = rapl_pmus->pmus[rapl_pmu_idx]; if (!pmu) return -EINVAL; event->pmu_private = pmu; @@ -623,12 +616,16 @@ static const struct attribute_group *rap static void __init init_rapl_pmu(void) { struct rapl_pmu *pmu; - int cpu; + int cpu, rapl_pmu_idx; cpus_read_lock(); for_each_cpu(cpu, cpu_online_mask) { - pmu = cpu_to_rapl_pmu(cpu); + rapl_pmu_idx = get_rapl_pmu_idx(cpu); + if (rapl_pmu_idx >= rapl_pmus->nr_rapl_pmu) + continue; + + pmu = rapl_pmus->pmus[rapl_pmu_idx]; if (pmu) continue; pmu = kzalloc_node(sizeof(*pmu), GFP_KERNEL, cpu_to_node(cpu)); @@ -640,7 +637,7 @@ static void __init init_rapl_pmu(void) pmu->timer_interval = ms_to_ktime(rapl_timer_ms); rapl_hrtimer_init(pmu); - rapl_pmus->pmus[get_rapl_pmu_idx(cpu)] = pmu; + rapl_pmus->pmus[rapl_pmu_idx] = pmu; } cpus_read_unlock();