1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __PERF_COUNTS_H 3 #define __PERF_COUNTS_H 4 5 #include <internal/xyarray.h> 6 7 struct perf_counts_values { 8 union { 9 struct { 10 u64 val; 11 u64 ena; 12 u64 run; 13 }; 14 u64 values[3]; 15 }; 16 }; 17 18 struct perf_counts { 19 s8 scaled; 20 struct perf_counts_values aggr; 21 struct xyarray *values; 22 struct xyarray *loaded; 23 }; 24 25 26 static inline struct perf_counts_values* 27 perf_counts(struct perf_counts *counts, int cpu, int thread) 28 { 29 return xyarray__entry(counts->values, cpu, thread); 30 } 31 32 static inline bool 33 perf_counts__is_loaded(struct perf_counts *counts, int cpu, int thread) 34 { 35 return *((bool *) xyarray__entry(counts->loaded, cpu, thread)); 36 } 37 38 static inline void 39 perf_counts__set_loaded(struct perf_counts *counts, int cpu, int thread, bool loaded) 40 { 41 *((bool *) xyarray__entry(counts->loaded, cpu, thread)) = loaded; 42 } 43 44 struct perf_counts *perf_counts__new(int ncpus, int nthreads); 45 void perf_counts__delete(struct perf_counts *counts); 46 47 void perf_evsel__reset_counts(struct evsel *evsel); 48 int perf_evsel__alloc_counts(struct evsel *evsel, int ncpus, int nthreads); 49 void perf_evsel__free_counts(struct evsel *evsel); 50 51 #endif /* __PERF_COUNTS_H */ 52