1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2a43783aeSArnaldo Carvalho de Melo #include <errno.h> 3d809560bSJiri Olsa #include <stdlib.h> 4cf4d9bd6SJin Yao #include <string.h> 5d809560bSJiri Olsa #include "evsel.h" 6d809560bSJiri Olsa #include "counts.h" 72ca0a371SIan Rogers #include <perf/threadmap.h> 87f7c536fSArnaldo Carvalho de Melo #include <linux/zalloc.h> 9d809560bSJiri Olsa perf_counts__new(int ncpus,int nthreads)10d809560bSJiri Olsastruct perf_counts *perf_counts__new(int ncpus, int nthreads) 11d809560bSJiri Olsa { 12d809560bSJiri Olsa struct perf_counts *counts = zalloc(sizeof(*counts)); 13d809560bSJiri Olsa 14d809560bSJiri Olsa if (counts) { 15d809560bSJiri Olsa struct xyarray *values; 16d809560bSJiri Olsa 17d809560bSJiri Olsa values = xyarray__new(ncpus, nthreads, sizeof(struct perf_counts_values)); 18d809560bSJiri Olsa if (!values) { 19d809560bSJiri Olsa free(counts); 20d809560bSJiri Olsa return NULL; 21d809560bSJiri Olsa } 22d809560bSJiri Olsa 23d809560bSJiri Olsa counts->values = values; 24df1d6856SJiri Olsa 25df1d6856SJiri Olsa values = xyarray__new(ncpus, nthreads, sizeof(bool)); 26df1d6856SJiri Olsa if (!values) { 27df1d6856SJiri Olsa xyarray__delete(counts->values); 28df1d6856SJiri Olsa free(counts); 29df1d6856SJiri Olsa return NULL; 30df1d6856SJiri Olsa } 31df1d6856SJiri Olsa 32df1d6856SJiri Olsa counts->loaded = values; 33d809560bSJiri Olsa } 34d809560bSJiri Olsa 35d809560bSJiri Olsa return counts; 36d809560bSJiri Olsa } 37d809560bSJiri Olsa perf_counts__delete(struct perf_counts * counts)38d809560bSJiri Olsavoid perf_counts__delete(struct perf_counts *counts) 39d809560bSJiri Olsa { 40d809560bSJiri Olsa if (counts) { 41df1d6856SJiri Olsa xyarray__delete(counts->loaded); 42d809560bSJiri Olsa xyarray__delete(counts->values); 43d809560bSJiri Olsa free(counts); 44d809560bSJiri Olsa } 45d809560bSJiri Olsa } 46d809560bSJiri Olsa perf_counts__reset(struct perf_counts * counts)47cf4d9bd6SJin Yaovoid perf_counts__reset(struct perf_counts *counts) 48d809560bSJiri Olsa { 49df1d6856SJiri Olsa xyarray__reset(counts->loaded); 50d809560bSJiri Olsa xyarray__reset(counts->values); 51d809560bSJiri Olsa } 52d809560bSJiri Olsa evsel__reset_counts(struct evsel * evsel)537d1e239eSArnaldo Carvalho de Melovoid evsel__reset_counts(struct evsel *evsel) 54d809560bSJiri Olsa { 55d809560bSJiri Olsa perf_counts__reset(evsel->counts); 56d809560bSJiri Olsa } 57d809560bSJiri Olsa evsel__alloc_counts(struct evsel * evsel)582ca0a371SIan Rogersint evsel__alloc_counts(struct evsel *evsel) 59d809560bSJiri Olsa { 602ca0a371SIan Rogers struct perf_cpu_map *cpus = evsel__cpus(evsel); 612ca0a371SIan Rogers int nthreads = perf_thread_map__nr(evsel->core.threads); 622ca0a371SIan Rogers 63*44028699SIan Rogers evsel->counts = perf_counts__new(perf_cpu_map__nr(cpus), nthreads); 64d809560bSJiri Olsa return evsel->counts != NULL ? 0 : -ENOMEM; 65d809560bSJiri Olsa } 66d809560bSJiri Olsa evsel__free_counts(struct evsel * evsel)677d1e239eSArnaldo Carvalho de Melovoid evsel__free_counts(struct evsel *evsel) 68d809560bSJiri Olsa { 69d809560bSJiri Olsa perf_counts__delete(evsel->counts); 70d809560bSJiri Olsa evsel->counts = NULL; 71d809560bSJiri Olsa } 72