Lines Matching +full:display +full:- +full:hint
1 // SPDX-License-Identifier: GPL-2.0-only
5 * Parts came from builtin-{top,stat,record}.c, see those files for further
26 #include "bpf-event.h"
33 #include "util/bpf-filter.h"
37 #include "util/intel-tpebs.h"
45 #include "parse-events.h"
46 #include <subcmd/parse-options.h>
73 #define FD(e, x, y) (*(int *)xyarray__entry(e->core.fd, x, y))
74 #define SID(e, x, y) xyarray__entry(e->core.sample_id, x, y)
79 perf_evlist__init(&evlist->core); in evlist__init()
80 perf_evlist__set_maps(&evlist->core, cpus, threads); in evlist__init()
81 evlist->workload.pid = -1; in evlist__init()
82 evlist->bkw_mmap_state = BKW_MMAP_NOTREADY; in evlist__init()
83 evlist->ctl_fd.fd = -1; in evlist__init()
84 evlist->ctl_fd.ack = -1; in evlist__init()
85 evlist->ctl_fd.pos = -1; in evlist__init()
86 evlist->nr_br_cntr = -1; in evlist__init()
87 metricgroup__rblist_init(&evlist->metric_events); in evlist__init()
116 if (evlist->core.nr_entries > 1) { in evlist__new_default()
139 * evlist__set_id_pos - set the positions of event ids.
149 evlist->id_pos = first->id_pos; in evlist__set_id_pos()
150 evlist->is_pos = first->is_pos; in evlist__set_id_pos()
168 list_del_init(&pos->core.node); in evlist__purge()
169 pos->evlist = NULL; in evlist__purge()
173 evlist->core.nr_entries = 0; in evlist__purge()
178 metricgroup__rblist_exit(&evlist->metric_events); in evlist__exit()
179 event_enable_timer__exit(&evlist->eet); in evlist__exit()
180 zfree(&evlist->mmap); in evlist__exit()
181 zfree(&evlist->overwrite_mmap); in evlist__exit()
182 perf_evlist__exit(&evlist->core); in evlist__exit()
200 perf_evlist__add(&evlist->core, &entry->core); in evlist__add()
201 entry->evlist = evlist; in evlist__add()
202 entry->tracking = !entry->core.idx; in evlist__add()
204 if (evlist->core.nr_entries == 1) in evlist__add()
210 evsel->evlist = NULL; in evlist__remove()
211 perf_evlist__remove(&evlist->core, &evsel->core); in evlist__remove()
220 list_del_init(&evsel->core.node); in evlist__splice_list_tail()
228 list_del_init(&evsel->core.node); in evlist__splice_list_tail()
247 err = -EEXIST; in __evlist__set_tracepoints_handlers()
248 if (evsel->handler != NULL) in __evlist__set_tracepoints_handlers()
250 evsel->handler = assocs[i].handler; in __evlist__set_tracepoints_handlers()
260 perf_evlist__set_leader(&evlist->core); in evlist__set_leader()
274 return evsel__new_idx(&attr, evlist->core.nr_entries); in evlist__dummy_event()
282 return -ENOMEM; in evlist__add_dummy()
295 evsel->core.attr.exclude_kernel = 1; in evlist__add_aux_dummy()
296 evsel->core.attr.exclude_guest = 1; in evlist__add_aux_dummy()
297 evsel->core.attr.exclude_hv = 1; in evlist__add_aux_dummy()
298 evsel->core.system_wide = system_wide; in evlist__add_aux_dummy()
299 evsel->no_aux_samples = true; in evlist__add_aux_dummy()
300 evsel->name = strdup("dummy:u"); in evlist__add_aux_dummy()
318 evsel->core.system_wide = system_wide; in evlist__add_sched_switch()
319 evsel->no_aux_samples = true; in evlist__add_sched_switch()
331 if ((evsel->core.attr.type == PERF_TYPE_TRACEPOINT) && in evlist__find_tracepoint_by_name()
332 (strcmp(evsel->name, name) == 0)) in evlist__find_tracepoint_by_name()
345 return -1; in evlist__add_newtp()
347 evsel->handler = handler; in evlist__add_newtp()
360 .evlist_cpu_map_nr = perf_cpu_map__nr(evlist->core.all_cpus), in evlist__cpu_begin()
361 .cpu = (struct perf_cpu){ .cpu = -1}, in evlist__cpu_begin()
371 itr.cpu = perf_cpu_map__cpu(evlist->core.all_cpus, 0); in evlist__cpu_begin()
373 itr.cpu_map_idx = perf_cpu_map__idx(itr.evsel->core.cpus, itr.cpu); in evlist__cpu_begin()
378 if (itr.cpu_map_idx == -1) in evlist__cpu_begin()
387 while (evlist_cpu_itr->evsel != evlist__last(evlist_cpu_itr->container)) { in evlist_cpu_iterator__next()
388 evlist_cpu_itr->evsel = evsel__next(evlist_cpu_itr->evsel); in evlist_cpu_iterator__next()
389 evlist_cpu_itr->cpu_map_idx = in evlist_cpu_iterator__next()
390 perf_cpu_map__idx(evlist_cpu_itr->evsel->core.cpus, in evlist_cpu_iterator__next()
391 evlist_cpu_itr->cpu); in evlist_cpu_iterator__next()
392 if (evlist_cpu_itr->cpu_map_idx != -1) in evlist_cpu_iterator__next()
395 evlist_cpu_itr->evlist_cpu_map_idx++; in evlist_cpu_iterator__next()
396 if (evlist_cpu_itr->evlist_cpu_map_idx < evlist_cpu_itr->evlist_cpu_map_nr) { in evlist_cpu_iterator__next()
397 evlist_cpu_itr->evsel = evlist__first(evlist_cpu_itr->container); in evlist_cpu_iterator__next()
398 evlist_cpu_itr->cpu = in evlist_cpu_iterator__next()
399 perf_cpu_map__cpu(evlist_cpu_itr->container->core.all_cpus, in evlist_cpu_iterator__next()
400 evlist_cpu_itr->evlist_cpu_map_idx); in evlist_cpu_iterator__next()
401 if (evlist_cpu_itr->affinity) in evlist_cpu_iterator__next()
402 affinity__set(evlist_cpu_itr->affinity, evlist_cpu_itr->cpu.cpu); in evlist_cpu_iterator__next()
403 evlist_cpu_itr->cpu_map_idx = in evlist_cpu_iterator__next()
404 perf_cpu_map__idx(evlist_cpu_itr->evsel->core.cpus, in evlist_cpu_iterator__next()
405 evlist_cpu_itr->cpu); in evlist_cpu_iterator__next()
410 if (evlist_cpu_itr->cpu_map_idx == -1) in evlist_cpu_iterator__next()
417 return evlist_cpu_itr->evlist_cpu_map_idx >= evlist_cpu_itr->evlist_cpu_map_nr; in evlist_cpu_iterator__end()
434 if (!evsel__is_group_leader(pos) || !pos->core.fd) in evlist__is_enabled()
437 if (!pos->disabled) in evlist__is_enabled()
451 if (!cpu_map__is_dummy(evlist->core.user_requested_cpus)) { in __evlist__disable()
463 if (pos->disabled || !evsel__is_group_leader(pos) || !pos->core.fd) in __evlist__disable()
467 if (pos->immediate) in __evlist__disable()
469 if (pos->immediate != imm) in __evlist__disable()
481 if (!evsel__is_group_leader(pos) || !pos->core.fd) in __evlist__disable()
485 pos->disabled = true; in __evlist__disable()
493 evlist->enabled = evlist__is_enabled(evlist); in __evlist__disable()
495 evlist->enabled = false; in __evlist__disable()
520 if (!cpu_map__is_dummy(evlist->core.user_requested_cpus)) { in __evlist__enable()
530 if (!evsel__is_group_leader(pos) || !pos->core.fd) in __evlist__enable()
540 if (!evsel__is_group_leader(pos) || !pos->core.fd) in __evlist__enable()
544 pos->disabled = false; in __evlist__enable()
552 evlist->enabled = true; in __evlist__enable()
572 (evlist->enabled ? evlist__disable : evlist__enable)(evlist); in evlist__toggle_enable()
577 return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN, fdarray_flag__default); in evlist__add_pollfd()
582 return perf_evlist__filter_pollfd(&evlist->core, revents_and_mask); in evlist__filter_pollfd()
588 return perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN, in evlist__add_wakeup_eventfd()
596 return perf_evlist__poll(&evlist->core, timeout); in evlist__poll()
606 head = &evlist->core.heads[hash]; in evlist__id2sid()
609 if (sid->id == id) in evlist__id2sid()
619 if (evlist->core.nr_entries == 1 || !id) in evlist__id2evsel()
624 return container_of(sid->evsel, struct evsel, core); in evlist__id2evsel()
641 return container_of(sid->evsel, struct evsel, core); in evlist__id2evsel_strict()
648 const __u64 *array = event->sample.array; in evlist__event2id()
651 n = (event->header.size - sizeof(event->header)) >> 3; in evlist__event2id()
653 if (event->header.type == PERF_RECORD_SAMPLE) { in evlist__event2id()
654 if (evlist->id_pos >= n) in evlist__event2id()
655 return -1; in evlist__event2id()
656 *id = array[evlist->id_pos]; in evlist__event2id()
658 if (evlist->is_pos > n) in evlist__event2id()
659 return -1; in evlist__event2id()
660 n -= evlist->is_pos; in evlist__event2id()
674 if (evlist->core.nr_entries == 1) in evlist__event2evsel()
677 if (!first->core.attr.sample_id_all && in evlist__event2evsel()
678 event->header.type != PERF_RECORD_SAMPLE) in evlist__event2evsel()
689 head = &evlist->core.heads[hash]; in evlist__event2evsel()
692 if (sid->id == id) in evlist__event2evsel()
693 return container_of(sid->evsel, struct evsel, core); in evlist__event2evsel()
702 if (!evlist->overwrite_mmap) in evlist__set_paused()
705 for (i = 0; i < evlist->core.nr_mmaps; i++) { in evlist__set_paused()
706 int fd = evlist->overwrite_mmap[i].core.fd; in evlist__set_paused()
732 if (evlist->mmap) in evlist__munmap_nofree()
733 for (i = 0; i < evlist->core.nr_mmaps; i++) in evlist__munmap_nofree()
734 perf_mmap__munmap(&evlist->mmap[i].core); in evlist__munmap_nofree()
736 if (evlist->overwrite_mmap) in evlist__munmap_nofree()
737 for (i = 0; i < evlist->core.nr_mmaps; i++) in evlist__munmap_nofree()
738 perf_mmap__munmap(&evlist->overwrite_mmap[i].core); in evlist__munmap_nofree()
744 zfree(&evlist->mmap); in evlist__munmap()
745 zfree(&evlist->overwrite_mmap); in evlist__munmap()
761 map = zalloc(evlist->core.nr_mmaps * sizeof(struct mmap)); in evlist__alloc_mmap()
765 for (i = 0; i < evlist->core.nr_mmaps; i++) { in evlist__alloc_mmap()
766 struct perf_mmap *prev = i ? &map[i - 1].core : NULL; in evlist__alloc_mmap()
793 auxtrace_mmap_params__set_idx(&mp->auxtrace_mp, evlist, evsel, idx); in perf_evlist__mmap_cb_idx()
802 maps = overwrite ? evlist->overwrite_mmap : evlist->mmap; in perf_evlist__mmap_cb_get()
810 evlist->overwrite_mmap = maps; in perf_evlist__mmap_cb_get()
811 if (evlist->bkw_mmap_state == BKW_MMAP_NOTREADY) in perf_evlist__mmap_cb_get()
814 evlist->mmap = maps; in perf_evlist__mmap_cb_get()
844 max -= (page_size / 1024); in perf_event_mlock_kb_in_pages()
877 return -EINVAL; in parse_pages_arg()
880 if (val != (unsigned long) -1) { in parse_pages_arg()
888 return -EINVAL; in parse_pages_arg()
899 return -EINVAL; in parse_pages_arg()
907 return -EINVAL; in parse_pages_arg()
922 pr_err("Invalid argument for --mmap_pages/-m\n"); in __evlist__parse_mmap_pages()
923 return -1; in __evlist__parse_mmap_pages()
932 return __evlist__parse_mmap_pages(opt->value, str); in evlist__parse_mmap_pages()
936 * evlist__mmap_ex - Create mmaps to receive events.
940 * @auxtrace_pages - auxtrace map length in pages
941 * @auxtrace_overwrite - overwrite older auxtrace data?
974 evlist->core.mmap_len = evlist__mmap_size(pages); in evlist__mmap_ex()
975 pr_debug("mmap size %zuB\n", evlist->core.mmap_len); in evlist__mmap_ex()
977 auxtrace_mmap_params__init(&mp.auxtrace_mp, evlist->core.mmap_len, in evlist__mmap_ex()
980 return perf_evlist__mmap_ops(&evlist->core, &ops, &mp.core); in evlist__mmap_ex()
990 bool all_threads = (target->per_thread && target->system_wide); in evlist__create_maps()
995 * If specify '-a' and '--per-thread' to perf record, perf record in evlist__create_maps()
996 * will override '--per-thread'. target->per_thread = false and in evlist__create_maps()
997 * target->system_wide = true. in evlist__create_maps()
999 * If specify '--per-thread' only to perf record, in evlist__create_maps()
1000 * target->per_thread = true and target->system_wide = false. in evlist__create_maps()
1002 * So target->per_thread && target->system_wide is false. in evlist__create_maps()
1007 * For perf stat, it allows the case that target->per_thread and in evlist__create_maps()
1008 * target->system_wide are all true. It means to collect system-wide in evlist__create_maps()
1009 * per-thread data. thread_map__new_str will call in evlist__create_maps()
1012 threads = thread_map__new_str(target->pid, target->tid, all_threads); in evlist__create_maps()
1015 return -1; in evlist__create_maps()
1020 cpus = perf_cpu_map__new(target->cpu_list); in evlist__create_maps()
1025 evlist->core.has_user_cpus = !!target->cpu_list; in evlist__create_maps()
1027 perf_evlist__set_maps(&evlist->core, cpus, threads); in evlist__create_maps()
1037 return -1; in evlist__create_maps()
1051 if (evsel->filter) { in evlist__apply_filters()
1052 err = perf_evsel__apply_filter(&evsel->core, evsel->filter); in evlist__apply_filters()
1060 * non-tracepoint events can have BPF filters. in evlist__apply_filters()
1062 if (!list_empty(&evsel->bpf_filters)) { in evlist__apply_filters()
1080 return -1; in evlist__set_tp_filter()
1083 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) in evlist__set_tp_filter()
1100 return -1; in evlist__append_tp_filter()
1103 if (evsel->core.attr.type != PERF_TYPE_TRACEPOINT) in evlist__append_tp_filter()
1167 if (evlist->core.nr_entries == 1) in evlist__valid_sample_type()
1170 if (evlist->id_pos < 0 || evlist->is_pos < 0) in evlist__valid_sample_type()
1174 if (pos->id_pos != evlist->id_pos || in evlist__valid_sample_type()
1175 pos->is_pos != evlist->is_pos) in evlist__valid_sample_type()
1186 if (evlist->combined_sample_type) in __evlist__combined_sample_type()
1187 return evlist->combined_sample_type; in __evlist__combined_sample_type()
1190 evlist->combined_sample_type |= evsel->core.attr.sample_type; in __evlist__combined_sample_type()
1192 return evlist->combined_sample_type; in __evlist__combined_sample_type()
1197 evlist->combined_sample_type = 0; in evlist__combined_sample_type()
1207 branch_type |= evsel->core.attr.branch_sample_type; in evlist__combined_branch_type()
1219 if ((pos->core.attr.branch_sample_type & PERF_SAMPLE_BRANCH_COUNTERS) && in evlist__find_dup_event_from_prev()
1220 !strcmp(pos->name, event->name)) in evlist__find_dup_event_from_prev()
1250 name[1] = '0' + i - 1; in evlist__new_abbr_name()
1263 if (evsel->core.attr.branch_sample_type & PERF_SAMPLE_BRANCH_COUNTERS) { in evlist__update_br_cntr()
1264 evsel->br_cntr_idx = i++; in evlist__update_br_cntr()
1265 evsel__leader(evsel)->br_cntr_nr++; in evlist__update_br_cntr()
1269 memcpy(evsel->abbr_name, dup->abbr_name, 3 * sizeof(char)); in evlist__update_br_cntr()
1271 evlist__new_abbr_name(evsel->abbr_name); in evlist__update_br_cntr()
1274 evlist->nr_br_cntr = i; in evlist__update_br_cntr()
1280 u64 read_format = first->core.attr.read_format; in evlist__valid_read_format()
1281 u64 sample_type = first->core.attr.sample_type; in evlist__valid_read_format()
1284 if (read_format != pos->core.attr.read_format) { in evlist__valid_read_format()
1286 read_format, (u64)pos->core.attr.read_format); in evlist__valid_read_format()
1303 return first->core.attr.sample_id_all ? evsel__id_hdr_size(first) : 0; in evlist__id_hdr_size()
1311 if (first->core.attr.sample_id_all != pos->core.attr.sample_id_all) in evlist__valid_sample_id_all()
1321 return first->core.attr.sample_id_all; in evlist__sample_id_all()
1326 evlist->selected = evsel; in evlist__set_selected()
1339 if (!evlist->core.user_requested_cpus || in evlist__close()
1340 cpu_map__is_dummy(evlist->core.user_requested_cpus)) { in evlist__close()
1350 perf_evsel__close_cpu(&evlist_cpu_itr.evsel->core, in evlist__close()
1356 perf_evsel__free_fd(&evsel->core); in evlist__close()
1357 perf_evsel__free_id(&evsel->core); in evlist__close()
1359 perf_evlist__reset_id_hash(&evlist->core); in evlist__close()
1371 * FIXME: -ENOMEM is the best we can do here, the cpu_map in evlist__create_syswide_maps()
1374 * default cpu identity map :-\ in evlist__create_syswide_maps()
1378 return -ENOMEM; in evlist__create_syswide_maps()
1383 return -ENOMEM; in evlist__create_syswide_maps()
1386 perf_evlist__set_maps(&evlist->core, cpus, threads); in evlist__create_syswide_maps()
1399 * as sys_perf_event_open(cpu = -1, thread = -1) is EINVAL in evlist__open()
1401 if (evlist->core.threads == NULL && evlist->core.user_requested_cpus == NULL) { in evlist__open()
1410 err = evsel__open(evsel, evsel->core.cpus, evsel->core.threads); in evlist__open()
1418 errno = -err; in evlist__open()
1428 evlist->workload.cork_fd = -1; in evlist__prepare_workload()
1432 return -1; in evlist__prepare_workload()
1440 evlist->workload.pid = fork(); in evlist__prepare_workload()
1441 if (evlist->workload.pid < 0) { in evlist__prepare_workload()
1446 if (!evlist->workload.pid) { in evlist__prepare_workload()
1459 * Change the name of this process not to confuse --exclude-perf users in evlist__prepare_workload()
1463 prctl(PR_SET_NAME, "perf-exec"); in evlist__prepare_workload()
1485 if (ret == -1) in evlist__prepare_workload()
1500 exit(-1); in evlist__prepare_workload()
1512 if (evlist->core.threads == NULL) { in evlist__prepare_workload()
1513 fprintf(stderr, "FATAL: evlist->threads need to be set at this point (%s:%d).\n", in evlist__prepare_workload()
1517 perf_thread_map__set_pid(evlist->core.threads, 0, evlist->workload.pid); in evlist__prepare_workload()
1525 if (read(child_ready_pipe[0], &bf, 1) == -1) { in evlist__prepare_workload()
1531 evlist->workload.cork_fd = go_pipe[1]; in evlist__prepare_workload()
1541 return -1; in evlist__prepare_workload()
1546 if (evlist->workload.cork_fd >= 0) { in evlist__start_workload()
1552 ret = write(evlist->workload.cork_fd, &bf, 1); in evlist__start_workload()
1556 close(evlist->workload.cork_fd); in evlist__start_workload()
1557 evlist->workload.cork_fd = -1; in evlist__start_workload()
1568 if (evlist->workload.cork_fd >= 0) { in evlist__cancel_workload()
1569 close(evlist->workload.cork_fd); in evlist__cancel_workload()
1570 evlist->workload.cork_fd = -1; in evlist__cancel_workload()
1571 waitpid(evlist->workload.pid, &status, WNOHANG); in evlist__cancel_workload()
1581 return -EFAULT; in evlist__parse_sample()
1585 if (perf_guest && sample->id) { in evlist__parse_sample()
1586 struct perf_sample_id *sid = evlist__id2sid(evlist, sample->id); in evlist__parse_sample()
1589 sample->machine_pid = sid->machine_pid; in evlist__parse_sample()
1590 sample->vcpu = sid->vcpu.cpu; in evlist__parse_sample()
1601 return -EFAULT; in evlist__parse_sample_timestamp()
1615 "Hint:\tCheck /proc/sys/kernel/perf_event_paranoid setting.", emsg); in evlist__strerror_open()
1619 printed += scnprintf(buf + printed, size - printed, "\nHint:\t"); in evlist__strerror_open()
1622 printed += scnprintf(buf + printed, size - printed, in evlist__strerror_open()
1625 printed += scnprintf(buf + printed, size - printed, in evlist__strerror_open()
1626 "For system wide tracing it needs to be set to -1.\n"); in evlist__strerror_open()
1628 printed += scnprintf(buf + printed, size - printed, in evlist__strerror_open()
1629 "Hint:\tTry: 'sudo sh -c \"echo -1 > /proc/sys/kernel/perf_event_paranoid\"'\n" in evlist__strerror_open()
1630 "Hint:\tThe current value is %d.", value); in evlist__strerror_open()
1639 if (first->core.attr.sample_freq < (u64)max_freq) in evlist__strerror_open()
1644 "Hint:\tCheck /proc/sys/kernel/perf_event_max_sample_rate.\n" in evlist__strerror_open()
1645 "Hint:\tThe current value is %d and %" PRIu64 " is being requested.", in evlist__strerror_open()
1646 emsg, max_freq, first->core.attr.sample_freq); in evlist__strerror_open()
1661 int pages_attempted = evlist->core.mmap_len / 1024, pages_max_per_user, printed = 0; in evlist__strerror_mmap()
1666 printed += scnprintf(buf + printed, size - printed, in evlist__strerror_mmap()
1668 "Hint:\tCheck /proc/sys/kernel/perf_event_mlock_kb (%d kB) setting.\n" in evlist__strerror_mmap()
1669 "Hint:\tTried using %zd kB.\n", in evlist__strerror_mmap()
1673 printed += scnprintf(buf + printed, size - printed, in evlist__strerror_mmap()
1674 "Hint:\tTry 'sudo sh -c \"echo %d > /proc/sys/kernel/perf_event_mlock_kb\"', or\n", in evlist__strerror_mmap()
1678 printed += scnprintf(buf + printed, size - printed, in evlist__strerror_mmap()
1679 "Hint:\tTry using a smaller -m/--mmap-pages value."); in evlist__strerror_mmap()
1699 list_move_tail(&evsel->core.node, &move); in evlist__to_front()
1702 list_splice(&move, &evlist->core.entries); in evlist__to_front()
1710 if (evsel->tracking) in evlist__get_tracking_event()
1721 if (tracking_evsel->tracking) in evlist__set_tracking_event()
1726 evsel->tracking = false; in evlist__set_tracking_event()
1729 tracking_evsel->tracking = true; in evlist__set_tracking_event()
1744 perf_evlist__go_system_wide(&evlist->core, &evsel->core); in evlist__findnew_tracking_event()
1755 if (!evsel->name) in evlist__find_evsel_by_str()
1766 enum bkw_mmap_state old_state = evlist->bkw_mmap_state; in evlist__toggle_bkw_mmap()
1773 if (!evlist->overwrite_mmap) in evlist__toggle_bkw_mmap()
1803 evlist->bkw_mmap_state = state; in evlist__toggle_bkw_mmap()
1826 if (!evsel->core.attr.exclude_kernel) in evlist__exclude_kernel()
1835 * the group display. Set the artificial group and set the leader's
1836 * forced_leader flag to notify the display code.
1844 leader->forced_leader = true; in evlist__force_leader()
1856 leader->name, leader->core.nr_members); in evlist__reset_weak_group()
1867 perf_evsel__close(&c2->core); in evlist__reset_weak_group()
1879 c2->reset_group = true; in evlist__reset_weak_group()
1883 if (leader->core.nr_members == 1) in evlist__reset_weak_group()
1884 leader->core.nr_members = 0; in evlist__reset_weak_group()
1894 return -EINVAL; in evlist__parse_control_fifo()
1898 return -EINVAL; in evlist__parse_control_fifo()
1902 return -ENOMEM; in evlist__parse_control_fifo()
1915 ret = -errno; in evlist__parse_control_fifo()
1926 ret = -errno; in evlist__parse_control_fifo()
1948 return -EINVAL; in evlist__parse_control()
1953 return -EINVAL; in evlist__parse_control()
1957 return -EINVAL; in evlist__parse_control()
1975 if (fd == -1) { in evlist__initialize_ctlfd()
1980 evlist->ctl_fd.pos = perf_evlist__add_pollfd(&evlist->core, fd, NULL, POLLIN, in evlist__initialize_ctlfd()
1983 if (evlist->ctl_fd.pos < 0) { in evlist__initialize_ctlfd()
1984 evlist->ctl_fd.pos = -1; in evlist__initialize_ctlfd()
1986 return -1; in evlist__initialize_ctlfd()
1989 evlist->ctl_fd.fd = fd; in evlist__initialize_ctlfd()
1990 evlist->ctl_fd.ack = ack; in evlist__initialize_ctlfd()
1997 return evlist->ctl_fd.pos >= 0; in evlist__ctlfd_initialized()
2002 struct pollfd *entries = evlist->core.pollfd.entries; in evlist__finalize_ctlfd()
2007 entries[evlist->ctl_fd.pos].fd = -1; in evlist__finalize_ctlfd()
2008 entries[evlist->ctl_fd.pos].events = 0; in evlist__finalize_ctlfd()
2009 entries[evlist->ctl_fd.pos].revents = 0; in evlist__finalize_ctlfd()
2011 evlist->ctl_fd.pos = -1; in evlist__finalize_ctlfd()
2012 evlist->ctl_fd.ack = -1; in evlist__finalize_ctlfd()
2013 evlist->ctl_fd.fd = -1; in evlist__finalize_ctlfd()
2027 data_size--; in evlist__ctlfd_recv()
2030 err = read(evlist->ctl_fd.fd, &c, 1); in evlist__ctlfd_recv()
2038 } else if (err == -1) { in evlist__ctlfd_recv()
2044 pr_err("Failed to read from ctlfd %d: %m\n", evlist->ctl_fd.fd); in evlist__ctlfd_recv()
2054 (sizeof(EVLIST_CTL_CMD_ENABLE_TAG)-1))) { in evlist__ctlfd_recv()
2057 (sizeof(EVLIST_CTL_CMD_DISABLE_TAG)-1))) { in evlist__ctlfd_recv()
2060 (sizeof(EVLIST_CTL_CMD_SNAPSHOT_TAG)-1))) { in evlist__ctlfd_recv()
2064 (sizeof(EVLIST_CTL_CMD_EVLIST_TAG)-1))) { in evlist__ctlfd_recv()
2067 (sizeof(EVLIST_CTL_CMD_STOP_TAG)-1))) { in evlist__ctlfd_recv()
2070 (sizeof(EVLIST_CTL_CMD_PING_TAG)-1))) { in evlist__ctlfd_recv()
2082 if (evlist->ctl_fd.ack == -1) in evlist__ctlfd_ack()
2085 err = write(evlist->ctl_fd.ack, EVLIST_CTL_CMD_ACK_TAG, in evlist__ctlfd_ack()
2087 if (err == -1) in evlist__ctlfd_ack()
2088 pr_err("failed to write to ctl_ack_fd %d: %m\n", evlist->ctl_fd.ack); in evlist__ctlfd_ack()
2108 return -1; in get_cmd_arg()
2118 enable ? sizeof(EVLIST_CTL_CMD_ENABLE_TAG) - 1 : in evlist__ctlfd_enable()
2119 sizeof(EVLIST_CTL_CMD_DISABLE_TAG) - 1, in evlist__ctlfd_enable()
2123 return -1; in evlist__ctlfd_enable()
2133 pr_info("Event %s %s\n", evsel->name, in evlist__ctlfd_enable()
2159 sizeof(EVLIST_CTL_CMD_EVLIST_TAG) - 1, in evlist__ctlfd_list()
2163 return -1; in evlist__ctlfd_list()
2167 if (!strcmp(arg, "-v")) { in evlist__ctlfd_list()
2169 } else if (!strcmp(arg, "-g")) { in evlist__ctlfd_list()
2171 } else if (!strcmp(arg, "-F")) { in evlist__ctlfd_list()
2175 return -1; in evlist__ctlfd_list()
2189 int ctlfd_pos = evlist->ctl_fd.pos; in evlist__ctlfd_process()
2190 struct pollfd *entries = evlist->core.pollfd.entries; in evlist__ctlfd_process()
2233 * struct event_enable_time - perf record -D/--delay single time range.
2246 const char *fmt = first ? "%u - %u %n" : " , %u - %u %n"; in parse_event_enable_time()
2251 return -EINVAL; in parse_event_enable_time()
2253 range->start = start; in parse_event_enable_time()
2254 range->end = end; in parse_event_enable_time()
2270 if (!first && range && range->start <= range[-1].end) in parse_event_enable_times()
2271 return -EINVAL; in parse_event_enable_times()
2280 * struct event_enable_timer - control structure for perf record -D/--delay.
2308 if (*endptr || d > INT_MAX || d < -1) in str_to_delay()
2325 opts->target.initial_delay = str_to_delay(str); in evlist__parse_event_enable_time()
2326 if (opts->target.initial_delay) in evlist__parse_event_enable_time()
2335 return -EINVAL; in evlist__parse_event_enable_time()
2339 return -ENOMEM; in evlist__parse_event_enable_time()
2341 eet->times = calloc(times_cnt, sizeof(*eet->times)); in evlist__parse_event_enable_time()
2342 if (!eet->times) { in evlist__parse_event_enable_time()
2343 err = -ENOMEM; in evlist__parse_event_enable_time()
2347 if (parse_event_enable_times(str, eet->times) != times_cnt) { in evlist__parse_event_enable_time()
2348 err = -EINVAL; in evlist__parse_event_enable_time()
2352 eet->times_cnt = times_cnt; in evlist__parse_event_enable_time()
2354 eet->timerfd = timerfd_create(CLOCK_MONOTONIC, TFD_CLOEXEC); in evlist__parse_event_enable_time()
2355 if (eet->timerfd == -1) { in evlist__parse_event_enable_time()
2356 err = -errno; in evlist__parse_event_enable_time()
2361 eet->pollfd_pos = perf_evlist__add_pollfd(&evlist->core, eet->timerfd, NULL, POLLIN, flags); in evlist__parse_event_enable_time()
2362 if (eet->pollfd_pos < 0) { in evlist__parse_event_enable_time()
2363 err = eet->pollfd_pos; in evlist__parse_event_enable_time()
2367 eet->evlist = evlist; in evlist__parse_event_enable_time()
2368 evlist->eet = eet; in evlist__parse_event_enable_time()
2369 opts->target.initial_delay = eet->times[0].start; in evlist__parse_event_enable_time()
2374 close(eet->timerfd); in evlist__parse_event_enable_time()
2376 zfree(&eet->times); in evlist__parse_event_enable_time()
2390 if (timerfd_settime(eet->timerfd, 0, &its, NULL) < 0) { in event_enable_timer__set_timer()
2391 err = -errno; in event_enable_timer__set_timer()
2404 ms = eet->times[0].end - eet->times[0].start; in event_enable_timer__start()
2405 eet->times_step = 1; in event_enable_timer__start()
2418 entries = eet->evlist->core.pollfd.entries; in event_enable_timer__process()
2419 revents = entries[eet->pollfd_pos].revents; in event_enable_timer__process()
2420 entries[eet->pollfd_pos].revents = 0; in event_enable_timer__process()
2423 size_t step = eet->times_step; in event_enable_timer__process()
2427 evlist__disable_non_dummy(eet->evlist); in event_enable_timer__process()
2429 if (pos >= eet->times_cnt - 1) { in event_enable_timer__process()
2435 evlist__enable_non_dummy(eet->evlist); in event_enable_timer__process()
2442 if (pos < eet->times_cnt) { in event_enable_timer__process()
2443 int *times = (int *)eet->times; /* Accessing 'times' as array of int */ in event_enable_timer__process()
2444 int ms = times[step] - times[step - 1]; in event_enable_timer__process()
2446 eet->times_step = step; in event_enable_timer__process()
2458 zfree(&(*ep)->times); in event_enable_timer__exit()
2467 if (evsel->core.idx == idx) in evlist__find_evsel()
2484 if (leader != new_leader && leader && leader->core.nr_members > 1) in evlist__format_evsels()
2490 if (sb->len > max_length) { in evlist__format_evsels()
2494 if (leader != new_leader && new_leader->core.nr_members > 1) in evlist__format_evsels()
2501 if (leader && leader->core.nr_members > 1) in evlist__format_evsels()
2510 * For some platforms, the 'mem-loads' event is required to use in evlist__check_mem_load_aux()
2511 * together with 'mem-loads-aux' within a group and 'mem-loads-aux' in evlist__check_mem_load_aux()
2513 * because 'mem-loads-aux' is just an auxiliary event. It doesn't carry in evlist__check_mem_load_aux()
2521 if (leader->name && strstr(leader->name, "mem-loads-aux")) { in evlist__check_mem_load_aux()
2524 pos->core.nr_members = 0; in evlist__check_mem_load_aux()
2531 * evlist__warn_user_requested_cpus() - Check each evsel against requested CPUs
2566 if (!first && counter->pmu != last_pmu) in evlist__disable_uniquify()
2569 if (counter->pmu) { in evlist__disable_uniquify()
2571 if (!counter->pmu->is_core) in evlist__disable_uniquify()
2577 last_pmu = counter->pmu; in evlist__disable_uniquify()
2589 counter->uniquified_name = true; in evlist__set_needs_uniquify()
2629 if (!evsel->core.attr.exclude_kernel) in evlist__needs_bpf_sb_event()