Lines Matching refs:evsel
48 static int perf_evsel__no_extra_init(struct perf_evsel *evsel __maybe_unused) in perf_evsel__no_extra_init()
55 static void perf_evsel__no_extra_fini(struct perf_evsel *evsel __maybe_unused) in perf_evsel__no_extra_fini()
61 int (*init)(struct perf_evsel *evsel);
62 void (*fini)(struct perf_evsel *evsel);
70 int (*init)(struct perf_evsel *evsel), in perf_evsel__object_config() argument
71 void (*fini)(struct perf_evsel *evsel)) in perf_evsel__object_config() argument
170 void perf_evsel__calc_id_pos(struct perf_evsel *evsel) in perf_evsel__calc_id_pos() argument
172 evsel->id_pos = __perf_evsel__calc_id_pos(evsel->attr.sample_type); in perf_evsel__calc_id_pos()
173 evsel->is_pos = __perf_evsel__calc_is_pos(evsel->attr.sample_type); in perf_evsel__calc_id_pos()
176 void __perf_evsel__set_sample_bit(struct perf_evsel *evsel, in __perf_evsel__set_sample_bit() argument
179 if (!(evsel->attr.sample_type & bit)) { in __perf_evsel__set_sample_bit()
180 evsel->attr.sample_type |= bit; in __perf_evsel__set_sample_bit()
181 evsel->sample_size += sizeof(u64); in __perf_evsel__set_sample_bit()
182 perf_evsel__calc_id_pos(evsel); in __perf_evsel__set_sample_bit()
186 void __perf_evsel__reset_sample_bit(struct perf_evsel *evsel, in __perf_evsel__reset_sample_bit() argument
189 if (evsel->attr.sample_type & bit) { in __perf_evsel__reset_sample_bit()
190 evsel->attr.sample_type &= ~bit; in __perf_evsel__reset_sample_bit()
191 evsel->sample_size -= sizeof(u64); in __perf_evsel__reset_sample_bit()
192 perf_evsel__calc_id_pos(evsel); in __perf_evsel__reset_sample_bit()
196 void perf_evsel__set_sample_id(struct perf_evsel *evsel, in perf_evsel__set_sample_id() argument
200 perf_evsel__reset_sample_bit(evsel, ID); in perf_evsel__set_sample_id()
201 perf_evsel__set_sample_bit(evsel, IDENTIFIER); in perf_evsel__set_sample_id()
203 perf_evsel__set_sample_bit(evsel, ID); in perf_evsel__set_sample_id()
205 evsel->attr.read_format |= PERF_FORMAT_ID; in perf_evsel__set_sample_id()
216 bool perf_evsel__is_function_event(struct perf_evsel *evsel) in perf_evsel__is_function_event() argument
220 return evsel->name && in perf_evsel__is_function_event()
221 !strncmp(FUNCTION_EVENT, evsel->name, sizeof(FUNCTION_EVENT)); in perf_evsel__is_function_event()
226 void perf_evsel__init(struct perf_evsel *evsel, in perf_evsel__init() argument
229 evsel->idx = idx; in perf_evsel__init()
230 evsel->tracking = !idx; in perf_evsel__init()
231 evsel->attr = *attr; in perf_evsel__init()
232 evsel->leader = evsel; in perf_evsel__init()
233 evsel->unit = ""; in perf_evsel__init()
234 evsel->scale = 1.0; in perf_evsel__init()
235 evsel->evlist = NULL; in perf_evsel__init()
236 evsel->bpf_fd = -1; in perf_evsel__init()
237 INIT_LIST_HEAD(&evsel->node); in perf_evsel__init()
238 INIT_LIST_HEAD(&evsel->config_terms); in perf_evsel__init()
239 perf_evsel__object.init(evsel); in perf_evsel__init()
240 evsel->sample_size = __perf_evsel__sample_size(attr->sample_type); in perf_evsel__init()
241 perf_evsel__calc_id_pos(evsel); in perf_evsel__init()
242 evsel->cmdline_group_boundary = false; in perf_evsel__init()
243 evsel->metric_expr = NULL; in perf_evsel__init()
244 evsel->metric_name = NULL; in perf_evsel__init()
245 evsel->metric_events = NULL; in perf_evsel__init()
246 evsel->collect_stat = false; in perf_evsel__init()
247 evsel->pmu_name = NULL; in perf_evsel__init()
252 struct perf_evsel *evsel = zalloc(perf_evsel__object.size); in perf_evsel__new_idx() local
254 if (!evsel) in perf_evsel__new_idx()
256 perf_evsel__init(evsel, attr, idx); in perf_evsel__new_idx()
258 if (perf_evsel__is_bpf_output(evsel)) { in perf_evsel__new_idx()
259 evsel->attr.sample_type |= (PERF_SAMPLE_RAW | PERF_SAMPLE_TIME | in perf_evsel__new_idx()
261 evsel->attr.sample_period = 1; in perf_evsel__new_idx()
264 if (perf_evsel__is_clock(evsel)) { in perf_evsel__new_idx()
271 evsel->unit = unit; in perf_evsel__new_idx()
272 evsel->scale = 1e-6; in perf_evsel__new_idx()
275 return evsel; in perf_evsel__new_idx()
290 struct perf_evsel *evsel; in perf_evsel__new_cycles() local
311 evsel = perf_evsel__new(&attr); in perf_evsel__new_cycles()
312 if (evsel == NULL) in perf_evsel__new_cycles()
316 if (asprintf(&evsel->name, "cycles%s%s%.*s", in perf_evsel__new_cycles()
322 return evsel; in perf_evsel__new_cycles()
324 perf_evsel__delete(evsel); in perf_evsel__new_cycles()
325 evsel = NULL; in perf_evsel__new_cycles()
334 struct perf_evsel *evsel = zalloc(perf_evsel__object.size); in perf_evsel__newtp_idx() local
337 if (evsel == NULL) { in perf_evsel__newtp_idx()
346 if (asprintf(&evsel->name, "%s:%s", sys, name) < 0) in perf_evsel__newtp_idx()
349 evsel->tp_format = trace_event__tp_format(sys, name); in perf_evsel__newtp_idx()
350 if (IS_ERR(evsel->tp_format)) { in perf_evsel__newtp_idx()
351 err = PTR_ERR(evsel->tp_format); in perf_evsel__newtp_idx()
356 attr.config = evsel->tp_format->id; in perf_evsel__newtp_idx()
358 perf_evsel__init(evsel, &attr, idx); in perf_evsel__newtp_idx()
361 return evsel; in perf_evsel__newtp_idx()
364 zfree(&evsel->name); in perf_evsel__newtp_idx()
365 free(evsel); in perf_evsel__newtp_idx()
391 static int perf_evsel__add_modifiers(struct perf_evsel *evsel, char *bf, size_t size) in perf_evsel__add_modifiers() argument
394 struct perf_event_attr *attr = &evsel->attr; in perf_evsel__add_modifiers()
427 static int perf_evsel__hw_name(struct perf_evsel *evsel, char *bf, size_t size) in perf_evsel__hw_name() argument
429 int r = scnprintf(bf, size, "%s", __perf_evsel__hw_name(evsel->attr.config)); in perf_evsel__hw_name()
430 return r + perf_evsel__add_modifiers(evsel, bf + r, size - r); in perf_evsel__hw_name()
453 static int perf_evsel__sw_name(struct perf_evsel *evsel, char *bf, size_t size) in perf_evsel__sw_name() argument
455 int r = scnprintf(bf, size, "%s", __perf_evsel__sw_name(evsel->attr.config)); in perf_evsel__sw_name()
456 return r + perf_evsel__add_modifiers(evsel, bf + r, size - r); in perf_evsel__sw_name()
477 static int perf_evsel__bp_name(struct perf_evsel *evsel, char *bf, size_t size) in perf_evsel__bp_name() argument
479 struct perf_event_attr *attr = &evsel->attr; in perf_evsel__bp_name()
481 return r + perf_evsel__add_modifiers(evsel, bf + r, size - r); in perf_evsel__bp_name()
577 static int perf_evsel__hw_cache_name(struct perf_evsel *evsel, char *bf, size_t size) in perf_evsel__hw_cache_name() argument
579 int ret = __perf_evsel__hw_cache_name(evsel->attr.config, bf, size); in perf_evsel__hw_cache_name()
580 return ret + perf_evsel__add_modifiers(evsel, bf + ret, size - ret); in perf_evsel__hw_cache_name()
583 static int perf_evsel__raw_name(struct perf_evsel *evsel, char *bf, size_t size) in perf_evsel__raw_name() argument
585 int ret = scnprintf(bf, size, "raw 0x%" PRIx64, evsel->attr.config); in perf_evsel__raw_name()
586 return ret + perf_evsel__add_modifiers(evsel, bf + ret, size - ret); in perf_evsel__raw_name()
589 const char *perf_evsel__name(struct perf_evsel *evsel) in perf_evsel__name() argument
593 if (evsel->name) in perf_evsel__name()
594 return evsel->name; in perf_evsel__name()
596 switch (evsel->attr.type) { in perf_evsel__name()
598 perf_evsel__raw_name(evsel, bf, sizeof(bf)); in perf_evsel__name()
602 perf_evsel__hw_name(evsel, bf, sizeof(bf)); in perf_evsel__name()
606 perf_evsel__hw_cache_name(evsel, bf, sizeof(bf)); in perf_evsel__name()
610 perf_evsel__sw_name(evsel, bf, sizeof(bf)); in perf_evsel__name()
618 perf_evsel__bp_name(evsel, bf, sizeof(bf)); in perf_evsel__name()
623 evsel->attr.type); in perf_evsel__name()
627 evsel->name = strdup(bf); in perf_evsel__name()
629 return evsel->name ?: "unknown"; in perf_evsel__name()
632 const char *perf_evsel__group_name(struct perf_evsel *evsel) in perf_evsel__group_name() argument
634 return evsel->group_name ?: "anon group"; in perf_evsel__group_name()
647 int perf_evsel__group_desc(struct perf_evsel *evsel, char *buf, size_t size) in perf_evsel__group_desc() argument
651 const char *group_name = perf_evsel__group_name(evsel); in perf_evsel__group_desc()
653 if (!evsel->forced_leader) in perf_evsel__group_desc()
657 perf_evsel__name(evsel)); in perf_evsel__group_desc()
659 for_each_group_member(pos, evsel) in perf_evsel__group_desc()
663 if (!evsel->forced_leader) in perf_evsel__group_desc()
669 static void __perf_evsel__config_callchain(struct perf_evsel *evsel, in __perf_evsel__config_callchain() argument
673 bool function = perf_evsel__is_function_event(evsel); in __perf_evsel__config_callchain()
674 struct perf_event_attr *attr = &evsel->attr; in __perf_evsel__config_callchain()
676 perf_evsel__set_sample_bit(evsel, CALLCHAIN); in __perf_evsel__config_callchain()
687 perf_evsel__set_sample_bit(evsel, BRANCH_STACK); in __perf_evsel__config_callchain()
700 perf_evsel__set_sample_bit(evsel, REGS_USER); in __perf_evsel__config_callchain()
701 perf_evsel__set_sample_bit(evsel, STACK_USER); in __perf_evsel__config_callchain()
717 void perf_evsel__config_callchain(struct perf_evsel *evsel, in perf_evsel__config_callchain() argument
722 return __perf_evsel__config_callchain(evsel, opts, param); in perf_evsel__config_callchain()
726 perf_evsel__reset_callgraph(struct perf_evsel *evsel, in perf_evsel__reset_callgraph() argument
729 struct perf_event_attr *attr = &evsel->attr; in perf_evsel__reset_callgraph()
731 perf_evsel__reset_sample_bit(evsel, CALLCHAIN); in perf_evsel__reset_callgraph()
733 perf_evsel__reset_sample_bit(evsel, BRANCH_STACK); in perf_evsel__reset_callgraph()
738 perf_evsel__reset_sample_bit(evsel, REGS_USER); in perf_evsel__reset_callgraph()
739 perf_evsel__reset_sample_bit(evsel, STACK_USER); in perf_evsel__reset_callgraph()
743 static void apply_config_terms(struct perf_evsel *evsel, in apply_config_terms() argument
747 struct list_head *config_terms = &evsel->config_terms; in apply_config_terms()
748 struct perf_event_attr *attr = &evsel->attr; in apply_config_terms()
763 perf_evsel__reset_sample_bit(evsel, PERIOD); in apply_config_terms()
770 perf_evsel__set_sample_bit(evsel, PERIOD); in apply_config_terms()
775 perf_evsel__set_sample_bit(evsel, TIME); in apply_config_terms()
777 perf_evsel__reset_sample_bit(evsel, TIME); in apply_config_terms()
784 perf_evsel__set_sample_bit(evsel, BRANCH_STACK); in apply_config_terms()
788 perf_evsel__reset_sample_bit(evsel, BRANCH_STACK); in apply_config_terms()
835 evsel->name); in apply_config_terms()
849 perf_evsel__reset_callgraph(evsel, &callchain_param); in apply_config_terms()
854 perf_evsel__set_sample_bit(evsel, ADDR); in apply_config_terms()
855 perf_evsel__set_sample_bit(evsel, DATA_SRC); in apply_config_terms()
856 evsel->attr.mmap_data = track; in apply_config_terms()
858 perf_evsel__config_callchain(evsel, opts, ¶m); in apply_config_terms()
863 static bool is_dummy_event(struct perf_evsel *evsel) in is_dummy_event() argument
865 return (evsel->attr.type == PERF_TYPE_SOFTWARE) && in is_dummy_event()
866 (evsel->attr.config == PERF_COUNT_SW_DUMMY); in is_dummy_event()
897 void perf_evsel__config(struct perf_evsel *evsel, struct record_opts *opts, in perf_evsel__config() argument
900 struct perf_evsel *leader = evsel->leader; in perf_evsel__config()
901 struct perf_event_attr *attr = &evsel->attr; in perf_evsel__config()
902 int track = evsel->tracking; in perf_evsel__config()
909 perf_evsel__set_sample_bit(evsel, IP); in perf_evsel__config()
910 perf_evsel__set_sample_bit(evsel, TID); in perf_evsel__config()
912 if (evsel->sample_read) { in perf_evsel__config()
913 perf_evsel__set_sample_bit(evsel, READ); in perf_evsel__config()
919 perf_evsel__set_sample_id(evsel, false); in perf_evsel__config()
938 perf_evsel__set_sample_bit(evsel, PERIOD); in perf_evsel__config()
950 if ((leader != evsel) && leader->sample_read) { in perf_evsel__config()
962 evsel->attr.read_format |= in perf_evsel__config()
970 perf_evsel__set_sample_bit(evsel, ADDR); in perf_evsel__config()
979 if (perf_evsel__is_function_event(evsel)) in perf_evsel__config()
980 evsel->attr.exclude_callchain_user = 1; in perf_evsel__config()
982 if (callchain && callchain->enabled && !evsel->no_aux_samples) in perf_evsel__config()
983 perf_evsel__config_callchain(evsel, opts, callchain); in perf_evsel__config()
987 perf_evsel__set_sample_bit(evsel, REGS_INTR); in perf_evsel__config()
992 perf_evsel__set_sample_bit(evsel, REGS_USER); in perf_evsel__config()
996 perf_evsel__set_sample_bit(evsel, CPU); in perf_evsel__config()
1005 perf_evsel__set_sample_bit(evsel, TIME); in perf_evsel__config()
1007 if (opts->raw_samples && !evsel->no_aux_samples) { in perf_evsel__config()
1008 perf_evsel__set_sample_bit(evsel, TIME); in perf_evsel__config()
1009 perf_evsel__set_sample_bit(evsel, RAW); in perf_evsel__config()
1010 perf_evsel__set_sample_bit(evsel, CPU); in perf_evsel__config()
1014 perf_evsel__set_sample_bit(evsel, DATA_SRC); in perf_evsel__config()
1017 perf_evsel__set_sample_bit(evsel, PHYS_ADDR); in perf_evsel__config()
1023 if (opts->branch_stack && !evsel->no_aux_samples) { in perf_evsel__config()
1024 perf_evsel__set_sample_bit(evsel, BRANCH_STACK); in perf_evsel__config()
1029 perf_evsel__set_sample_bit(evsel, WEIGHT); in perf_evsel__config()
1043 perf_evsel__set_sample_bit(evsel, TRANSACTION); in perf_evsel__config()
1046 evsel->attr.read_format |= in perf_evsel__config()
1057 if (perf_evsel__is_group_leader(evsel)) in perf_evsel__config()
1064 if (target__none(&opts->target) && perf_evsel__is_group_leader(evsel) && in perf_evsel__config()
1068 if (evsel->immediate) { in perf_evsel__config()
1079 if (evsel->precise_max) in perf_evsel__config()
1092 if (evsel->own_cpus) in perf_evsel__config()
1093 evsel->attr.read_format |= PERF_FORMAT_ID; in perf_evsel__config()
1099 apply_config_terms(evsel, opts, track); in perf_evsel__config()
1101 evsel->ignore_missing_thread = opts->ignore_missing_thread; in perf_evsel__config()
1106 perf_evsel__set_sample_bit(evsel, PERIOD); in perf_evsel__config()
1108 perf_evsel__reset_sample_bit(evsel, PERIOD); in perf_evsel__config()
1116 if (opts->initial_delay && is_dummy_event(evsel)) in perf_evsel__config()
1117 perf_evsel__reset_sample_bit(evsel, BRANCH_STACK); in perf_evsel__config()
1120 static int perf_evsel__alloc_fd(struct perf_evsel *evsel, int ncpus, int nthreads) in perf_evsel__alloc_fd() argument
1122 if (evsel->system_wide) in perf_evsel__alloc_fd()
1125 evsel->fd = xyarray__new(ncpus, nthreads, sizeof(int)); in perf_evsel__alloc_fd()
1127 if (evsel->fd) { in perf_evsel__alloc_fd()
1131 FD(evsel, cpu, thread) = -1; in perf_evsel__alloc_fd()
1136 return evsel->fd != NULL ? 0 : -ENOMEM; in perf_evsel__alloc_fd()
1139 static int perf_evsel__run_ioctl(struct perf_evsel *evsel, in perf_evsel__run_ioctl() argument
1144 for (cpu = 0; cpu < xyarray__max_x(evsel->fd); cpu++) { in perf_evsel__run_ioctl()
1145 for (thread = 0; thread < xyarray__max_y(evsel->fd); thread++) { in perf_evsel__run_ioctl()
1146 int fd = FD(evsel, cpu, thread), in perf_evsel__run_ioctl()
1157 int perf_evsel__apply_filter(struct perf_evsel *evsel, const char *filter) in perf_evsel__apply_filter() argument
1159 return perf_evsel__run_ioctl(evsel, in perf_evsel__apply_filter()
1164 int perf_evsel__set_filter(struct perf_evsel *evsel, const char *filter) in perf_evsel__set_filter() argument
1169 free(evsel->filter); in perf_evsel__set_filter()
1170 evsel->filter = new_filter; in perf_evsel__set_filter()
1177 static int perf_evsel__append_filter(struct perf_evsel *evsel, in perf_evsel__append_filter() argument
1182 if (evsel->filter == NULL) in perf_evsel__append_filter()
1183 return perf_evsel__set_filter(evsel, filter); in perf_evsel__append_filter()
1185 if (asprintf(&new_filter, fmt, evsel->filter, filter) > 0) { in perf_evsel__append_filter()
1186 free(evsel->filter); in perf_evsel__append_filter()
1187 evsel->filter = new_filter; in perf_evsel__append_filter()
1194 int perf_evsel__append_tp_filter(struct perf_evsel *evsel, const char *filter) in perf_evsel__append_tp_filter() argument
1196 return perf_evsel__append_filter(evsel, "(%s) && (%s)", filter); in perf_evsel__append_tp_filter()
1199 int perf_evsel__append_addr_filter(struct perf_evsel *evsel, const char *filter) in perf_evsel__append_addr_filter() argument
1201 return perf_evsel__append_filter(evsel, "%s,%s", filter); in perf_evsel__append_addr_filter()
1204 int perf_evsel__enable(struct perf_evsel *evsel) in perf_evsel__enable() argument
1206 return perf_evsel__run_ioctl(evsel, in perf_evsel__enable()
1211 int perf_evsel__disable(struct perf_evsel *evsel) in perf_evsel__disable() argument
1213 return perf_evsel__run_ioctl(evsel, in perf_evsel__disable()
1218 int perf_evsel__alloc_id(struct perf_evsel *evsel, int ncpus, int nthreads) in perf_evsel__alloc_id() argument
1223 if (evsel->system_wide) in perf_evsel__alloc_id()
1226 evsel->sample_id = xyarray__new(ncpus, nthreads, sizeof(struct perf_sample_id)); in perf_evsel__alloc_id()
1227 if (evsel->sample_id == NULL) in perf_evsel__alloc_id()
1230 evsel->id = zalloc(ncpus * nthreads * sizeof(u64)); in perf_evsel__alloc_id()
1231 if (evsel->id == NULL) { in perf_evsel__alloc_id()
1232 xyarray__delete(evsel->sample_id); in perf_evsel__alloc_id()
1233 evsel->sample_id = NULL; in perf_evsel__alloc_id()
1240 static void perf_evsel__free_fd(struct perf_evsel *evsel) in perf_evsel__free_fd() argument
1242 xyarray__delete(evsel->fd); in perf_evsel__free_fd()
1243 evsel->fd = NULL; in perf_evsel__free_fd()
1246 static void perf_evsel__free_id(struct perf_evsel *evsel) in perf_evsel__free_id() argument
1248 xyarray__delete(evsel->sample_id); in perf_evsel__free_id()
1249 evsel->sample_id = NULL; in perf_evsel__free_id()
1250 zfree(&evsel->id); in perf_evsel__free_id()
1253 static void perf_evsel__free_config_terms(struct perf_evsel *evsel) in perf_evsel__free_config_terms() argument
1257 list_for_each_entry_safe(term, h, &evsel->config_terms, list) { in perf_evsel__free_config_terms()
1263 void perf_evsel__close_fd(struct perf_evsel *evsel) in perf_evsel__close_fd() argument
1267 for (cpu = 0; cpu < xyarray__max_x(evsel->fd); cpu++) in perf_evsel__close_fd()
1268 for (thread = 0; thread < xyarray__max_y(evsel->fd); ++thread) { in perf_evsel__close_fd()
1269 close(FD(evsel, cpu, thread)); in perf_evsel__close_fd()
1270 FD(evsel, cpu, thread) = -1; in perf_evsel__close_fd()
1274 void perf_evsel__exit(struct perf_evsel *evsel) in perf_evsel__exit() argument
1276 assert(list_empty(&evsel->node)); in perf_evsel__exit()
1277 assert(evsel->evlist == NULL); in perf_evsel__exit()
1278 perf_evsel__free_fd(evsel); in perf_evsel__exit()
1279 perf_evsel__free_id(evsel); in perf_evsel__exit()
1280 perf_evsel__free_config_terms(evsel); in perf_evsel__exit()
1281 cgroup__put(evsel->cgrp); in perf_evsel__exit()
1282 cpu_map__put(evsel->cpus); in perf_evsel__exit()
1283 cpu_map__put(evsel->own_cpus); in perf_evsel__exit()
1284 thread_map__put(evsel->threads); in perf_evsel__exit()
1285 zfree(&evsel->group_name); in perf_evsel__exit()
1286 zfree(&evsel->name); in perf_evsel__exit()
1287 perf_evsel__object.fini(evsel); in perf_evsel__exit()
1290 void perf_evsel__delete(struct perf_evsel *evsel) in perf_evsel__delete() argument
1292 perf_evsel__exit(evsel); in perf_evsel__delete()
1293 free(evsel); in perf_evsel__delete()
1296 void perf_evsel__compute_deltas(struct perf_evsel *evsel, int cpu, int thread, in perf_evsel__compute_deltas() argument
1301 if (!evsel->prev_raw_counts) in perf_evsel__compute_deltas()
1305 tmp = evsel->prev_raw_counts->aggr; in perf_evsel__compute_deltas()
1306 evsel->prev_raw_counts->aggr = *count; in perf_evsel__compute_deltas()
1308 tmp = *perf_counts(evsel->prev_raw_counts, cpu, thread); in perf_evsel__compute_deltas()
1309 *perf_counts(evsel->prev_raw_counts, cpu, thread) = *count; in perf_evsel__compute_deltas()
1337 static int perf_evsel__read_size(struct perf_evsel *evsel) in perf_evsel__read_size() argument
1339 u64 read_format = evsel->attr.read_format; in perf_evsel__read_size()
1354 nr = evsel->nr_members; in perf_evsel__read_size()
1362 int perf_evsel__read(struct perf_evsel *evsel, int cpu, int thread, in perf_evsel__read() argument
1365 size_t size = perf_evsel__read_size(evsel); in perf_evsel__read()
1369 if (FD(evsel, cpu, thread) < 0) in perf_evsel__read()
1372 if (readn(FD(evsel, cpu, thread), count->values, size) <= 0) in perf_evsel__read()
1379 perf_evsel__read_one(struct perf_evsel *evsel, int cpu, int thread) in perf_evsel__read_one() argument
1381 struct perf_counts_values *count = perf_counts(evsel->counts, cpu, thread); in perf_evsel__read_one()
1383 return perf_evsel__read(evsel, cpu, thread, count); in perf_evsel__read_one()
1469 int perf_evsel__read_counter(struct perf_evsel *evsel, int cpu, int thread) in perf_evsel__read_counter() argument
1471 u64 read_format = evsel->attr.read_format; in perf_evsel__read_counter()
1474 return perf_evsel__read_group(evsel, cpu, thread); in perf_evsel__read_counter()
1476 return perf_evsel__read_one(evsel, cpu, thread); in perf_evsel__read_counter()
1479 int __perf_evsel__read_on_cpu(struct perf_evsel *evsel, in __perf_evsel__read_on_cpu() argument
1485 if (FD(evsel, cpu, thread) < 0) in __perf_evsel__read_on_cpu()
1488 if (evsel->counts == NULL && perf_evsel__alloc_counts(evsel, cpu + 1, thread + 1) < 0) in __perf_evsel__read_on_cpu()
1491 if (readn(FD(evsel, cpu, thread), &count, nv * sizeof(u64)) <= 0) in __perf_evsel__read_on_cpu()
1494 perf_evsel__compute_deltas(evsel, cpu, thread, &count); in __perf_evsel__read_on_cpu()
1496 *perf_counts(evsel->counts, cpu, thread) = count; in __perf_evsel__read_on_cpu()
1500 static int get_group_fd(struct perf_evsel *evsel, int cpu, int thread) in get_group_fd() argument
1502 struct perf_evsel *leader = evsel->leader; in get_group_fd()
1505 if (perf_evsel__is_group_leader(evsel)) in get_group_fd()
1672 static int update_fds(struct perf_evsel *evsel, in update_fds() argument
1681 evlist__for_each_entry(evsel->evlist, pos) { in update_fds()
1682 nr_cpus = pos != evsel ? nr_cpus : cpu_idx; in update_fds()
1690 if (pos == evsel) in update_fds()
1696 static bool ignore_missing_thread(struct perf_evsel *evsel, in ignore_missing_thread() argument
1703 if (!evsel->ignore_missing_thread) in ignore_missing_thread()
1707 if (evsel->system_wide) in ignore_missing_thread()
1722 if (update_fds(evsel, nr_cpus, cpu, threads->nr, thread)) in ignore_missing_thread()
1733 int perf_evsel__open(struct perf_evsel *evsel, struct cpu_map *cpus, in perf_evsel__open() argument
1741 if (perf_missing_features.write_backward && evsel->attr.write_backward) in perf_evsel__open()
1768 if (evsel->system_wide) in perf_evsel__open()
1773 if (evsel->fd == NULL && in perf_evsel__open()
1774 perf_evsel__alloc_fd(evsel, cpus->nr, nthreads) < 0) in perf_evsel__open()
1777 if (evsel->cgrp) { in perf_evsel__open()
1779 pid = evsel->cgrp->fd; in perf_evsel__open()
1784 evsel->attr.clockid = CLOCK_MONOTONIC; /* should always work */ in perf_evsel__open()
1786 evsel->attr.use_clockid = 0; in perf_evsel__open()
1787 evsel->attr.clockid = 0; in perf_evsel__open()
1792 evsel->attr.mmap2 = 0; in perf_evsel__open()
1794 evsel->attr.exclude_guest = evsel->attr.exclude_host = 0; in perf_evsel__open()
1796 evsel->attr.branch_sample_type &= ~(PERF_SAMPLE_BRANCH_NO_FLAGS | in perf_evsel__open()
1798 if (perf_missing_features.group_read && evsel->attr.inherit) in perf_evsel__open()
1799 evsel->attr.read_format &= ~(PERF_FORMAT_GROUP|PERF_FORMAT_ID); in perf_evsel__open()
1802 evsel->attr.sample_id_all = 0; in perf_evsel__open()
1807 perf_event_attr__fprintf(stderr, &evsel->attr, __open_attr__fprintf, NULL); in perf_evsel__open()
1816 if (!evsel->cgrp && !evsel->system_wide) in perf_evsel__open()
1819 group_fd = get_group_fd(evsel, cpu, thread); in perf_evsel__open()
1826 fd = sys_perf_event_open(&evsel->attr, pid, cpus->map[cpu], in perf_evsel__open()
1829 FD(evsel, cpu, thread) = fd; in perf_evsel__open()
1834 if (ignore_missing_thread(evsel, cpus->nr, cpu, threads, thread, err)) { in perf_evsel__open()
1855 if (evsel->bpf_fd >= 0) { in perf_evsel__open()
1857 int bpf_fd = evsel->bpf_fd; in perf_evsel__open()
1919 if (!perf_missing_features.write_backward && evsel->attr.write_backward) { in perf_evsel__open()
1923 } else if (!perf_missing_features.clockid_wrong && evsel->attr.use_clockid) { in perf_evsel__open()
1927 } else if (!perf_missing_features.clockid && evsel->attr.use_clockid) { in perf_evsel__open()
1935 } else if (!perf_missing_features.mmap2 && evsel->attr.mmap2) { in perf_evsel__open()
1940 (evsel->attr.exclude_guest || evsel->attr.exclude_host)) { in perf_evsel__open()
1949 (evsel->attr.branch_sample_type & in perf_evsel__open()
1956 evsel->attr.inherit && in perf_evsel__open()
1957 (evsel->attr.read_format & PERF_FORMAT_GROUP) && in perf_evsel__open()
1958 perf_evsel__is_group_leader(evsel)) { in perf_evsel__open()
1969 close(FD(evsel, cpu, thread)); in perf_evsel__open()
1970 FD(evsel, cpu, thread) = -1; in perf_evsel__open()
1977 void perf_evsel__close(struct perf_evsel *evsel) in perf_evsel__close() argument
1979 if (evsel->fd == NULL) in perf_evsel__close()
1982 perf_evsel__close_fd(evsel); in perf_evsel__close()
1983 perf_evsel__free_fd(evsel); in perf_evsel__close()
1986 int perf_evsel__open_per_cpu(struct perf_evsel *evsel, in perf_evsel__open_per_cpu() argument
1989 return perf_evsel__open(evsel, cpus, NULL); in perf_evsel__open_per_cpu()
1992 int perf_evsel__open_per_thread(struct perf_evsel *evsel, in perf_evsel__open_per_thread() argument
1995 return perf_evsel__open(evsel, NULL, threads); in perf_evsel__open_per_thread()
1998 static int perf_evsel__parse_id_sample(const struct perf_evsel *evsel, in perf_evsel__parse_id_sample() argument
2002 u64 type = evsel->attr.sample_type; in perf_evsel__parse_id_sample()
2004 bool swapped = evsel->needs_swap; in perf_evsel__parse_id_sample()
2088 int perf_evsel__parse_sample(struct perf_evsel *evsel, union perf_event *event, in perf_evsel__parse_sample() argument
2091 u64 type = evsel->attr.sample_type; in perf_evsel__parse_sample()
2092 bool swapped = evsel->needs_swap; in perf_evsel__parse_sample()
2107 data->period = evsel->attr.sample_period; in perf_evsel__parse_sample()
2114 if (!evsel->attr.sample_id_all) in perf_evsel__parse_sample()
2116 return perf_evsel__parse_id_sample(evsel, event, data); in perf_evsel__parse_sample()
2121 if (perf_event__check_size(event, evsel->sample_size)) in perf_evsel__parse_sample()
2187 u64 read_format = evsel->attr.read_format; in perf_evsel__parse_sample()
2229 if (evsel__has_callchain(evsel)) { in perf_evsel__parse_sample()
2292 u64 mask = evsel->attr.sample_regs_user; in perf_evsel__parse_sample()
2348 u64 mask = evsel->attr.sample_regs_intr; in perf_evsel__parse_sample()
2367 int perf_evsel__parse_sample_timestamp(struct perf_evsel *evsel, in perf_evsel__parse_sample_timestamp() argument
2371 u64 type = evsel->attr.sample_type; in perf_evsel__parse_sample_timestamp()
2382 if (!evsel->attr.sample_id_all) in perf_evsel__parse_sample_timestamp()
2384 if (perf_evsel__parse_id_sample(evsel, event, &data)) in perf_evsel__parse_sample_timestamp()
2393 if (perf_event__check_size(event, evsel->sample_size)) in perf_evsel__parse_sample_timestamp()
2688 struct format_field *perf_evsel__field(struct perf_evsel *evsel, const char *name) in perf_evsel__field() argument
2690 return tep_find_field(evsel->tp_format, name); in perf_evsel__field()
2693 void *perf_evsel__rawptr(struct perf_evsel *evsel, struct perf_sample *sample, in perf_evsel__rawptr() argument
2696 struct format_field *field = perf_evsel__field(evsel, name); in perf_evsel__rawptr()
2751 u64 perf_evsel__intval(struct perf_evsel *evsel, struct perf_sample *sample, in perf_evsel__intval() argument
2754 struct format_field *field = perf_evsel__field(evsel, name); in perf_evsel__intval()
2759 return field ? format_field__intval(field, sample, evsel->needs_swap) : 0; in perf_evsel__intval()
2762 bool perf_evsel__fallback(struct perf_evsel *evsel, int err, in perf_evsel__fallback() argument
2768 evsel->attr.type == PERF_TYPE_HARDWARE && in perf_evsel__fallback()
2769 evsel->attr.config == PERF_COUNT_HW_CPU_CYCLES) { in perf_evsel__fallback()
2781 evsel->attr.type = PERF_TYPE_SOFTWARE; in perf_evsel__fallback()
2782 evsel->attr.config = PERF_COUNT_SW_CPU_CLOCK; in perf_evsel__fallback()
2784 zfree(&evsel->name); in perf_evsel__fallback()
2786 } else if (err == EACCES && !evsel->attr.exclude_kernel && in perf_evsel__fallback()
2788 const char *name = perf_evsel__name(evsel); in perf_evsel__fallback()
2800 if (evsel->name) in perf_evsel__fallback()
2801 free(evsel->name); in perf_evsel__fallback()
2802 evsel->name = new_name; in perf_evsel__fallback()
2805 evsel->attr.exclude_kernel = 1; in perf_evsel__fallback()
2849 int perf_evsel__open_strerror(struct perf_evsel *evsel, struct target *target, in perf_evsel__open_strerror() argument
2861 perf_evsel__name(evsel)); in perf_evsel__open_strerror()
2881 perf_evsel__name(evsel)); in perf_evsel__open_strerror()
2889 if (evsel__has_callchain(evsel) && in perf_evsel__open_strerror()
2902 if (evsel->attr.sample_period != 0) in perf_evsel__open_strerror()
2905 perf_evsel__name(evsel)); in perf_evsel__open_strerror()
2906 if (evsel->attr.precise_ip) in perf_evsel__open_strerror()
2910 if (evsel->attr.type == PERF_TYPE_HARDWARE) in perf_evsel__open_strerror()
2922 if (evsel->attr.write_backward && perf_missing_features.write_backward) in perf_evsel__open_strerror()
2937 perf_evsel__name(evsel)); in perf_evsel__open_strerror()
2940 struct perf_env *perf_evsel__env(struct perf_evsel *evsel) in perf_evsel__env() argument
2942 if (evsel && evsel->evlist) in perf_evsel__env()
2943 return evsel->evlist->env; in perf_evsel__env()