1 /* SPDX-License-Identifier: GPL-2.0 */ 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __LIBPERF_INTERNAL_EVSEL_H 2 #ifndef __LIBPERF_INTERNAL_EVSEL_H 3 #define __LIBPERF_INTERNAL_EVSEL_H 3 #define __LIBPERF_INTERNAL_EVSEL_H 4 4 5 #include <linux/types.h> 5 #include <linux/types.h> 6 #include <linux/perf_event.h> 6 #include <linux/perf_event.h> 7 #include <stdbool.h> 7 #include <stdbool.h> 8 #include <sys/types.h> 8 #include <sys/types.h> 9 #include <internal/cpumap.h> 9 #include <internal/cpumap.h> 10 10 11 struct perf_thread_map; 11 struct perf_thread_map; 12 struct xyarray; 12 struct xyarray; 13 13 14 /* 14 /* 15 * Per fd, to map back from PERF_SAMPLE_ID to 15 * Per fd, to map back from PERF_SAMPLE_ID to evsel, only used when there are 16 * more than one entry in the evlist. 16 * more than one entry in the evlist. 17 */ 17 */ 18 struct perf_sample_id { 18 struct perf_sample_id { 19 struct hlist_node node; 19 struct hlist_node node; 20 u64 id; 20 u64 id; 21 struct perf_evsel *evsel; 21 struct perf_evsel *evsel; 22 /* 22 /* 23 * 'idx' will be used for AUX area samp 23 * 'idx' will be used for AUX area sampling. A sample will have AUX area 24 * data that will be queued for decodin 24 * data that will be queued for decoding, where there are separate 25 * queues for each CPU (per-cpu tracing 25 * queues for each CPU (per-cpu tracing) or task (per-thread tracing). 26 * The sample ID can be used to lookup 26 * The sample ID can be used to lookup 'idx' which is effectively the 27 * queue number. 27 * queue number. 28 */ 28 */ 29 int idx; 29 int idx; 30 struct perf_cpu cpu; 30 struct perf_cpu cpu; 31 pid_t tid; 31 pid_t tid; 32 32 33 /* Guest machine pid and VCPU, valid o << 34 pid_t machine_pid; << 35 struct perf_cpu vcpu; << 36 << 37 /* Holds total ID period value for PER 33 /* Holds total ID period value for PERF_SAMPLE_READ processing. */ 38 u64 period; 34 u64 period; 39 }; 35 }; 40 36 41 struct perf_evsel { 37 struct perf_evsel { 42 struct list_head node; 38 struct list_head node; 43 struct perf_event_attr attr; 39 struct perf_event_attr attr; 44 /** The commonly used cpu map of CPUs << 45 struct perf_cpu_map *cpus; 40 struct perf_cpu_map *cpus; 46 /** << 47 * The cpu map read from the PMU. For << 48 * CPUs the event can be opened upon. << 49 * cpu map for opening the event on, f << 50 * socket for an uncore event. << 51 */ << 52 struct perf_cpu_map *own_cpus; 41 struct perf_cpu_map *own_cpus; 53 struct perf_thread_map *threads; 42 struct perf_thread_map *threads; 54 struct xyarray *fd; 43 struct xyarray *fd; 55 struct xyarray *mmap; 44 struct xyarray *mmap; 56 struct xyarray *sample_id; 45 struct xyarray *sample_id; 57 u64 *id; 46 u64 *id; 58 u32 ids; 47 u32 ids; 59 struct perf_evsel *leader; 48 struct perf_evsel *leader; 60 49 61 /* parse modifier helper */ 50 /* parse modifier helper */ 62 int nr_members; 51 int nr_members; 63 /* << 64 * system_wide is for events that need << 65 * of user requested CPUs or threads. << 66 * dummy event. Map propagation will s << 67 * as software PMU events like dummy, << 68 */ << 69 bool system_wide; 52 bool system_wide; 70 /* << 71 * Some events, for example uncore eve << 72 * i.e. it cannot be the 'any CPU' val << 73 */ << 74 bool requires_cpu; << 75 /** Is the PMU for the event a core on << 76 bool is_pmu_core; << 77 int idx; 53 int idx; 78 }; 54 }; 79 55 80 void perf_evsel__init(struct perf_evsel *evsel 56 void perf_evsel__init(struct perf_evsel *evsel, struct perf_event_attr *attr, 81 int idx); 57 int idx); 82 int perf_evsel__alloc_fd(struct perf_evsel *ev 58 int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads); 83 void perf_evsel__close_fd(struct perf_evsel *e 59 void perf_evsel__close_fd(struct perf_evsel *evsel); 84 void perf_evsel__free_fd(struct perf_evsel *ev 60 void perf_evsel__free_fd(struct perf_evsel *evsel); 85 int perf_evsel__read_size(struct perf_evsel *e 61 int perf_evsel__read_size(struct perf_evsel *evsel); 86 int perf_evsel__apply_filter(struct perf_evsel 62 int perf_evsel__apply_filter(struct perf_evsel *evsel, const char *filter); 87 63 88 int perf_evsel__alloc_id(struct perf_evsel *ev 64 int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads); 89 void perf_evsel__free_id(struct perf_evsel *ev 65 void perf_evsel__free_id(struct perf_evsel *evsel); 90 66 91 #endif /* __LIBPERF_INTERNAL_EVSEL_H */ 67 #endif /* __LIBPERF_INTERNAL_EVSEL_H */ 92 68
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.