• Home
  • Raw
  • Download

Lines Matching +full:event +full:-

1 // SPDX-License-Identifier: GPL-2.0
29 #include "thread-stack.h"
30 #include "sample-raw.h"
39 union perf_event *event, u64 file_offset) in perf_session__process_compressed_event() argument
44 size_t mmap_len, decomp_len = session->header.env.comp_mmap_len; in perf_session__process_compressed_event()
45 struct decomp *decomp, *decomp_last = session->decomp_last; in perf_session__process_compressed_event()
48 decomp_last_rem = decomp_last->size - decomp_last->head; in perf_session__process_compressed_event()
54 MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); in perf_session__process_compressed_event()
57 return -1; in perf_session__process_compressed_event()
60 decomp->file_pos = file_offset; in perf_session__process_compressed_event()
61 decomp->mmap_len = mmap_len; in perf_session__process_compressed_event()
62 decomp->head = 0; in perf_session__process_compressed_event()
65 memcpy(decomp->data, &(decomp_last->data[decomp_last->head]), decomp_last_rem); in perf_session__process_compressed_event()
66 decomp->size = decomp_last_rem; in perf_session__process_compressed_event()
69 src = (void *)event + sizeof(struct perf_record_compressed); in perf_session__process_compressed_event()
70 src_size = event->pack.header.size - sizeof(struct perf_record_compressed); in perf_session__process_compressed_event()
72 decomp_size = zstd_decompress_stream(&(session->zstd_data), src, src_size, in perf_session__process_compressed_event()
73 &(decomp->data[decomp_last_rem]), decomp_len - decomp_last_rem); in perf_session__process_compressed_event()
77 return -1; in perf_session__process_compressed_event()
80 decomp->size += decomp_size; in perf_session__process_compressed_event()
82 if (session->decomp == NULL) { in perf_session__process_compressed_event()
83 session->decomp = decomp; in perf_session__process_compressed_event()
84 session->decomp_last = decomp; in perf_session__process_compressed_event()
86 session->decomp_last->next = decomp; in perf_session__process_compressed_event()
87 session->decomp_last = decomp; in perf_session__process_compressed_event()
99 union perf_event *event,
105 struct perf_data *data = session->data; in perf_session__open()
108 pr_err("incompatible file format (rerun with -v to learn more)\n"); in perf_session__open()
109 return -1; in perf_session__open()
115 if (perf_header__has_feat(&session->header, HEADER_STAT)) in perf_session__open()
118 if (!evlist__valid_sample_type(session->evlist)) { in perf_session__open()
120 return -1; in perf_session__open()
123 if (!evlist__valid_sample_id_all(session->evlist)) { in perf_session__open()
125 return -1; in perf_session__open()
128 if (!perf_evlist__valid_read_format(session->evlist)) { in perf_session__open()
130 return -1; in perf_session__open()
138 u16 id_hdr_size = perf_evlist__id_hdr_size(session->evlist); in perf_session__set_id_hdr_size()
140 machines__set_id_hdr_size(&session->machines, id_hdr_size); in perf_session__set_id_hdr_size()
145 int ret = machine__create_kernel_maps(&session->machines.host); in perf_session__create_kernel_maps()
148 ret = machines__create_guest_kernel_maps(&session->machines); in perf_session__create_kernel_maps()
154 machines__destroy_kernel_maps(&session->machines); in perf_session__destroy_kernel_maps()
161 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_comm_exec()
162 if (evsel->core.attr.comm_exec) in perf_session__has_comm_exec()
173 machines__set_comm_exec(&session->machines, comm_exec); in perf_session__set_comm_exec()
177 struct ordered_event *event) in ordered_events__deliver_event() argument
182 return perf_session__deliver_event(session, event->event, in ordered_events__deliver_event()
183 session->tool, event->file_offset); in ordered_events__deliver_event()
189 int ret = -ENOMEM; in perf_session__new()
195 session->repipe = repipe; in perf_session__new()
196 session->tool = tool; in perf_session__new()
197 INIT_LIST_HEAD(&session->auxtrace_index); in perf_session__new()
198 machines__init(&session->machines); in perf_session__new()
199 ordered_events__init(&session->ordered_events, in perf_session__new()
202 perf_env__init(&session->header.env); in perf_session__new()
208 session->data = data; in perf_session__new()
217 * but not in pipe-mode. in perf_session__new()
219 if (!data->is_pipe) { in perf_session__new()
224 perf_evlist__init_trace_event_sample_raw(session->evlist); in perf_session__new()
227 if (data->is_dir) { in perf_session__new()
238 session->machines.host.env = &perf_env; in perf_session__new()
241 session->machines.host.single_address_space = in perf_session__new()
242 perf_env__single_address_space(session->machines.host.env); in perf_session__new()
247 * kernel MMAP event, in perf_event__process_mmap(). in perf_session__new()
254 * In pipe-mode, evlist is empty until PERF_RECORD_HEADER_ATTR is in perf_session__new()
257 if ((!data || !data->is_pipe) && tool && tool->ordering_requires_timestamps && in perf_session__new()
258 tool->ordered_events && !evlist__sample_id_all(session->evlist)) { in perf_session__new()
260 tool->ordered_events = false; in perf_session__new()
273 machine__delete_threads(&session->machines.host); in perf_session__delete_threads()
280 next = session->decomp; in perf_session__release_decomp_events()
285 next = decomp->next; in perf_session__release_decomp_events()
286 mmap_len = decomp->mmap_len; in perf_session__release_decomp_events()
296 auxtrace_index__free(&session->auxtrace_index); in perf_session__delete()
300 perf_env__exit(&session->header.env); in perf_session__delete()
301 machines__exit(&session->machines); in perf_session__delete()
302 if (session->data) in perf_session__delete()
303 perf_data__close(session->data); in perf_session__delete()
309 union perf_event *event in process_event_synth_tracing_data_stub()
317 union perf_event *event __maybe_unused, in process_event_synth_attr_stub()
326 union perf_event *event __maybe_unused, in process_event_synth_event_update_stub()
331 perf_event__fprintf_event_update(event, stdout); in process_event_synth_event_update_stub()
338 union perf_event *event __maybe_unused, in process_event_sample_stub()
348 union perf_event *event __maybe_unused, in process_event_stub()
357 union perf_event *event __maybe_unused, in process_finished_round_stub()
365 union perf_event *event,
377 n -= ret; in skipn()
384 union perf_event *event) in process_event_auxtrace_stub() argument
387 if (perf_data__is_pipe(session->data)) in process_event_auxtrace_stub()
388 skipn(perf_data__fd(session->data), event->auxtrace.size); in process_event_auxtrace_stub()
389 return event->auxtrace.size; in process_event_auxtrace_stub()
393 union perf_event *event __maybe_unused) in process_event_op2_stub()
402 union perf_event *event __maybe_unused) in process_event_thread_map_stub()
405 perf_event__fprintf_thread_map(event, stdout); in process_event_thread_map_stub()
413 union perf_event *event __maybe_unused) in process_event_cpu_map_stub()
416 perf_event__fprintf_cpu_map(event, stdout); in process_event_cpu_map_stub()
424 union perf_event *event __maybe_unused) in process_event_stat_config_stub()
427 perf_event__fprintf_stat_config(event, stdout); in process_event_stat_config_stub()
434 union perf_event *event) in process_stat_stub() argument
437 perf_event__fprintf_stat(event, stdout); in process_stat_stub()
444 union perf_event *event) in process_stat_round_stub() argument
447 perf_event__fprintf_stat_round(event, stdout); in process_stat_round_stub()
454 union perf_event *event __maybe_unused, in perf_session__process_compressed_event_stub()
463 if (tool->sample == NULL) in perf_tool__fill_defaults()
464 tool->sample = process_event_sample_stub; in perf_tool__fill_defaults()
465 if (tool->mmap == NULL) in perf_tool__fill_defaults()
466 tool->mmap = process_event_stub; in perf_tool__fill_defaults()
467 if (tool->mmap2 == NULL) in perf_tool__fill_defaults()
468 tool->mmap2 = process_event_stub; in perf_tool__fill_defaults()
469 if (tool->comm == NULL) in perf_tool__fill_defaults()
470 tool->comm = process_event_stub; in perf_tool__fill_defaults()
471 if (tool->namespaces == NULL) in perf_tool__fill_defaults()
472 tool->namespaces = process_event_stub; in perf_tool__fill_defaults()
473 if (tool->cgroup == NULL) in perf_tool__fill_defaults()
474 tool->cgroup = process_event_stub; in perf_tool__fill_defaults()
475 if (tool->fork == NULL) in perf_tool__fill_defaults()
476 tool->fork = process_event_stub; in perf_tool__fill_defaults()
477 if (tool->exit == NULL) in perf_tool__fill_defaults()
478 tool->exit = process_event_stub; in perf_tool__fill_defaults()
479 if (tool->lost == NULL) in perf_tool__fill_defaults()
480 tool->lost = perf_event__process_lost; in perf_tool__fill_defaults()
481 if (tool->lost_samples == NULL) in perf_tool__fill_defaults()
482 tool->lost_samples = perf_event__process_lost_samples; in perf_tool__fill_defaults()
483 if (tool->aux == NULL) in perf_tool__fill_defaults()
484 tool->aux = perf_event__process_aux; in perf_tool__fill_defaults()
485 if (tool->itrace_start == NULL) in perf_tool__fill_defaults()
486 tool->itrace_start = perf_event__process_itrace_start; in perf_tool__fill_defaults()
487 if (tool->context_switch == NULL) in perf_tool__fill_defaults()
488 tool->context_switch = perf_event__process_switch; in perf_tool__fill_defaults()
489 if (tool->ksymbol == NULL) in perf_tool__fill_defaults()
490 tool->ksymbol = perf_event__process_ksymbol; in perf_tool__fill_defaults()
491 if (tool->bpf == NULL) in perf_tool__fill_defaults()
492 tool->bpf = perf_event__process_bpf; in perf_tool__fill_defaults()
493 if (tool->text_poke == NULL) in perf_tool__fill_defaults()
494 tool->text_poke = perf_event__process_text_poke; in perf_tool__fill_defaults()
495 if (tool->read == NULL) in perf_tool__fill_defaults()
496 tool->read = process_event_sample_stub; in perf_tool__fill_defaults()
497 if (tool->throttle == NULL) in perf_tool__fill_defaults()
498 tool->throttle = process_event_stub; in perf_tool__fill_defaults()
499 if (tool->unthrottle == NULL) in perf_tool__fill_defaults()
500 tool->unthrottle = process_event_stub; in perf_tool__fill_defaults()
501 if (tool->attr == NULL) in perf_tool__fill_defaults()
502 tool->attr = process_event_synth_attr_stub; in perf_tool__fill_defaults()
503 if (tool->event_update == NULL) in perf_tool__fill_defaults()
504 tool->event_update = process_event_synth_event_update_stub; in perf_tool__fill_defaults()
505 if (tool->tracing_data == NULL) in perf_tool__fill_defaults()
506 tool->tracing_data = process_event_synth_tracing_data_stub; in perf_tool__fill_defaults()
507 if (tool->build_id == NULL) in perf_tool__fill_defaults()
508 tool->build_id = process_event_op2_stub; in perf_tool__fill_defaults()
509 if (tool->finished_round == NULL) { in perf_tool__fill_defaults()
510 if (tool->ordered_events) in perf_tool__fill_defaults()
511 tool->finished_round = process_finished_round; in perf_tool__fill_defaults()
513 tool->finished_round = process_finished_round_stub; in perf_tool__fill_defaults()
515 if (tool->id_index == NULL) in perf_tool__fill_defaults()
516 tool->id_index = process_event_op2_stub; in perf_tool__fill_defaults()
517 if (tool->auxtrace_info == NULL) in perf_tool__fill_defaults()
518 tool->auxtrace_info = process_event_op2_stub; in perf_tool__fill_defaults()
519 if (tool->auxtrace == NULL) in perf_tool__fill_defaults()
520 tool->auxtrace = process_event_auxtrace_stub; in perf_tool__fill_defaults()
521 if (tool->auxtrace_error == NULL) in perf_tool__fill_defaults()
522 tool->auxtrace_error = process_event_op2_stub; in perf_tool__fill_defaults()
523 if (tool->thread_map == NULL) in perf_tool__fill_defaults()
524 tool->thread_map = process_event_thread_map_stub; in perf_tool__fill_defaults()
525 if (tool->cpu_map == NULL) in perf_tool__fill_defaults()
526 tool->cpu_map = process_event_cpu_map_stub; in perf_tool__fill_defaults()
527 if (tool->stat_config == NULL) in perf_tool__fill_defaults()
528 tool->stat_config = process_event_stat_config_stub; in perf_tool__fill_defaults()
529 if (tool->stat == NULL) in perf_tool__fill_defaults()
530 tool->stat = process_stat_stub; in perf_tool__fill_defaults()
531 if (tool->stat_round == NULL) in perf_tool__fill_defaults()
532 tool->stat_round = process_stat_round_stub; in perf_tool__fill_defaults()
533 if (tool->time_conv == NULL) in perf_tool__fill_defaults()
534 tool->time_conv = process_event_op2_stub; in perf_tool__fill_defaults()
535 if (tool->feature == NULL) in perf_tool__fill_defaults()
536 tool->feature = process_event_op2_stub; in perf_tool__fill_defaults()
537 if (tool->compressed == NULL) in perf_tool__fill_defaults()
538 tool->compressed = perf_session__process_compressed_event; in perf_tool__fill_defaults()
541 static void swap_sample_id_all(union perf_event *event, void *data) in swap_sample_id_all() argument
543 void *end = (void *) event + event->header.size; in swap_sample_id_all()
544 int size = end - data; in swap_sample_id_all()
550 static void perf_event__all64_swap(union perf_event *event, in perf_event__all64_swap() argument
553 struct perf_event_header *hdr = &event->header; in perf_event__all64_swap()
554 mem_bswap_64(hdr + 1, event->header.size - sizeof(*hdr)); in perf_event__all64_swap()
557 static void perf_event__comm_swap(union perf_event *event, bool sample_id_all) in perf_event__comm_swap() argument
559 event->comm.pid = bswap_32(event->comm.pid); in perf_event__comm_swap()
560 event->comm.tid = bswap_32(event->comm.tid); in perf_event__comm_swap()
563 void *data = &event->comm.comm; in perf_event__comm_swap()
566 swap_sample_id_all(event, data); in perf_event__comm_swap()
570 static void perf_event__mmap_swap(union perf_event *event, in perf_event__mmap_swap() argument
573 event->mmap.pid = bswap_32(event->mmap.pid); in perf_event__mmap_swap()
574 event->mmap.tid = bswap_32(event->mmap.tid); in perf_event__mmap_swap()
575 event->mmap.start = bswap_64(event->mmap.start); in perf_event__mmap_swap()
576 event->mmap.len = bswap_64(event->mmap.len); in perf_event__mmap_swap()
577 event->mmap.pgoff = bswap_64(event->mmap.pgoff); in perf_event__mmap_swap()
580 void *data = &event->mmap.filename; in perf_event__mmap_swap()
583 swap_sample_id_all(event, data); in perf_event__mmap_swap()
587 static void perf_event__mmap2_swap(union perf_event *event, in perf_event__mmap2_swap() argument
590 event->mmap2.pid = bswap_32(event->mmap2.pid); in perf_event__mmap2_swap()
591 event->mmap2.tid = bswap_32(event->mmap2.tid); in perf_event__mmap2_swap()
592 event->mmap2.start = bswap_64(event->mmap2.start); in perf_event__mmap2_swap()
593 event->mmap2.len = bswap_64(event->mmap2.len); in perf_event__mmap2_swap()
594 event->mmap2.pgoff = bswap_64(event->mmap2.pgoff); in perf_event__mmap2_swap()
595 event->mmap2.maj = bswap_32(event->mmap2.maj); in perf_event__mmap2_swap()
596 event->mmap2.min = bswap_32(event->mmap2.min); in perf_event__mmap2_swap()
597 event->mmap2.ino = bswap_64(event->mmap2.ino); in perf_event__mmap2_swap()
598 event->mmap2.ino_generation = bswap_64(event->mmap2.ino_generation); in perf_event__mmap2_swap()
601 void *data = &event->mmap2.filename; in perf_event__mmap2_swap()
604 swap_sample_id_all(event, data); in perf_event__mmap2_swap()
607 static void perf_event__task_swap(union perf_event *event, bool sample_id_all) in perf_event__task_swap() argument
609 event->fork.pid = bswap_32(event->fork.pid); in perf_event__task_swap()
610 event->fork.tid = bswap_32(event->fork.tid); in perf_event__task_swap()
611 event->fork.ppid = bswap_32(event->fork.ppid); in perf_event__task_swap()
612 event->fork.ptid = bswap_32(event->fork.ptid); in perf_event__task_swap()
613 event->fork.time = bswap_64(event->fork.time); in perf_event__task_swap()
616 swap_sample_id_all(event, &event->fork + 1); in perf_event__task_swap()
619 static void perf_event__read_swap(union perf_event *event, bool sample_id_all) in perf_event__read_swap() argument
621 event->read.pid = bswap_32(event->read.pid); in perf_event__read_swap()
622 event->read.tid = bswap_32(event->read.tid); in perf_event__read_swap()
623 event->read.value = bswap_64(event->read.value); in perf_event__read_swap()
624 event->read.time_enabled = bswap_64(event->read.time_enabled); in perf_event__read_swap()
625 event->read.time_running = bswap_64(event->read.time_running); in perf_event__read_swap()
626 event->read.id = bswap_64(event->read.id); in perf_event__read_swap()
629 swap_sample_id_all(event, &event->read + 1); in perf_event__read_swap()
632 static void perf_event__aux_swap(union perf_event *event, bool sample_id_all) in perf_event__aux_swap() argument
634 event->aux.aux_offset = bswap_64(event->aux.aux_offset); in perf_event__aux_swap()
635 event->aux.aux_size = bswap_64(event->aux.aux_size); in perf_event__aux_swap()
636 event->aux.flags = bswap_64(event->aux.flags); in perf_event__aux_swap()
639 swap_sample_id_all(event, &event->aux + 1); in perf_event__aux_swap()
642 static void perf_event__itrace_start_swap(union perf_event *event, in perf_event__itrace_start_swap() argument
645 event->itrace_start.pid = bswap_32(event->itrace_start.pid); in perf_event__itrace_start_swap()
646 event->itrace_start.tid = bswap_32(event->itrace_start.tid); in perf_event__itrace_start_swap()
649 swap_sample_id_all(event, &event->itrace_start + 1); in perf_event__itrace_start_swap()
652 static void perf_event__switch_swap(union perf_event *event, bool sample_id_all) in perf_event__switch_swap() argument
654 if (event->header.type == PERF_RECORD_SWITCH_CPU_WIDE) { in perf_event__switch_swap()
655 event->context_switch.next_prev_pid = in perf_event__switch_swap()
656 bswap_32(event->context_switch.next_prev_pid); in perf_event__switch_swap()
657 event->context_switch.next_prev_tid = in perf_event__switch_swap()
658 bswap_32(event->context_switch.next_prev_tid); in perf_event__switch_swap()
662 swap_sample_id_all(event, &event->context_switch + 1); in perf_event__switch_swap()
665 static void perf_event__text_poke_swap(union perf_event *event, bool sample_id_all) in perf_event__text_poke_swap() argument
667 event->text_poke.addr = bswap_64(event->text_poke.addr); in perf_event__text_poke_swap()
668 event->text_poke.old_len = bswap_16(event->text_poke.old_len); in perf_event__text_poke_swap()
669 event->text_poke.new_len = bswap_16(event->text_poke.new_len); in perf_event__text_poke_swap()
672 size_t len = sizeof(event->text_poke.old_len) + in perf_event__text_poke_swap()
673 sizeof(event->text_poke.new_len) + in perf_event__text_poke_swap()
674 event->text_poke.old_len + in perf_event__text_poke_swap()
675 event->text_poke.new_len; in perf_event__text_poke_swap()
676 void *data = &event->text_poke.old_len; in perf_event__text_poke_swap()
679 swap_sample_id_all(event, data); in perf_event__text_poke_swap()
683 static void perf_event__throttle_swap(union perf_event *event, in perf_event__throttle_swap() argument
686 event->throttle.time = bswap_64(event->throttle.time); in perf_event__throttle_swap()
687 event->throttle.id = bswap_64(event->throttle.id); in perf_event__throttle_swap()
688 event->throttle.stream_id = bswap_64(event->throttle.stream_id); in perf_event__throttle_swap()
691 swap_sample_id_all(event, &event->throttle + 1); in perf_event__throttle_swap()
694 static void perf_event__namespaces_swap(union perf_event *event, in perf_event__namespaces_swap() argument
699 event->namespaces.pid = bswap_32(event->namespaces.pid); in perf_event__namespaces_swap()
700 event->namespaces.tid = bswap_32(event->namespaces.tid); in perf_event__namespaces_swap()
701 event->namespaces.nr_namespaces = bswap_64(event->namespaces.nr_namespaces); in perf_event__namespaces_swap()
703 for (i = 0; i < event->namespaces.nr_namespaces; i++) { in perf_event__namespaces_swap()
704 struct perf_ns_link_info *ns = &event->namespaces.link_info[i]; in perf_event__namespaces_swap()
706 ns->dev = bswap_64(ns->dev); in perf_event__namespaces_swap()
707 ns->ino = bswap_64(ns->ino); in perf_event__namespaces_swap()
711 swap_sample_id_all(event, &event->namespaces.link_info[i]); in perf_event__namespaces_swap()
714 static void perf_event__cgroup_swap(union perf_event *event, bool sample_id_all) in perf_event__cgroup_swap() argument
716 event->cgroup.id = bswap_64(event->cgroup.id); in perf_event__cgroup_swap()
719 void *data = &event->cgroup.path; in perf_event__cgroup_swap()
722 swap_sample_id_all(event, data); in perf_event__cgroup_swap()
738 * Bit-fields are allocated from right to left (least to most significant)
739 * on little-endian implementations and from left to right (most to least
740 * significant) on big-endian implementations.
761 attr->type = bswap_32(attr->type); in perf_event__attr_swap()
762 attr->size = bswap_32(attr->size); in perf_event__attr_swap()
765 (attr->size > (offsetof(struct perf_event_attr, f) + \ in perf_event__attr_swap()
766 sizeof(attr->f) * (n))) in perf_event__attr_swap()
770 attr->f = bswap_##sz(attr->f); \ in perf_event__attr_swap()
796 swap_bitfield((u8 *) (&attr->read_format + 1), in perf_event__attr_swap()
804 static void perf_event__hdr_attr_swap(union perf_event *event, in perf_event__hdr_attr_swap() argument
809 perf_event__attr_swap(&event->attr.attr); in perf_event__hdr_attr_swap()
811 size = event->header.size; in perf_event__hdr_attr_swap()
812 size -= (void *)&event->attr.id - (void *)event; in perf_event__hdr_attr_swap()
813 mem_bswap_64(event->attr.id, size); in perf_event__hdr_attr_swap()
816 static void perf_event__event_update_swap(union perf_event *event, in perf_event__event_update_swap() argument
819 event->event_update.type = bswap_64(event->event_update.type); in perf_event__event_update_swap()
820 event->event_update.id = bswap_64(event->event_update.id); in perf_event__event_update_swap()
823 static void perf_event__event_type_swap(union perf_event *event, in perf_event__event_type_swap() argument
826 event->event_type.event_type.event_id = in perf_event__event_type_swap()
827 bswap_64(event->event_type.event_type.event_id); in perf_event__event_type_swap()
830 static void perf_event__tracing_data_swap(union perf_event *event, in perf_event__tracing_data_swap() argument
833 event->tracing_data.size = bswap_32(event->tracing_data.size); in perf_event__tracing_data_swap()
836 static void perf_event__auxtrace_info_swap(union perf_event *event, in perf_event__auxtrace_info_swap() argument
841 event->auxtrace_info.type = bswap_32(event->auxtrace_info.type); in perf_event__auxtrace_info_swap()
843 size = event->header.size; in perf_event__auxtrace_info_swap()
844 size -= (void *)&event->auxtrace_info.priv - (void *)event; in perf_event__auxtrace_info_swap()
845 mem_bswap_64(event->auxtrace_info.priv, size); in perf_event__auxtrace_info_swap()
848 static void perf_event__auxtrace_swap(union perf_event *event, in perf_event__auxtrace_swap() argument
851 event->auxtrace.size = bswap_64(event->auxtrace.size); in perf_event__auxtrace_swap()
852 event->auxtrace.offset = bswap_64(event->auxtrace.offset); in perf_event__auxtrace_swap()
853 event->auxtrace.reference = bswap_64(event->auxtrace.reference); in perf_event__auxtrace_swap()
854 event->auxtrace.idx = bswap_32(event->auxtrace.idx); in perf_event__auxtrace_swap()
855 event->auxtrace.tid = bswap_32(event->auxtrace.tid); in perf_event__auxtrace_swap()
856 event->auxtrace.cpu = bswap_32(event->auxtrace.cpu); in perf_event__auxtrace_swap()
859 static void perf_event__auxtrace_error_swap(union perf_event *event, in perf_event__auxtrace_error_swap() argument
862 event->auxtrace_error.type = bswap_32(event->auxtrace_error.type); in perf_event__auxtrace_error_swap()
863 event->auxtrace_error.code = bswap_32(event->auxtrace_error.code); in perf_event__auxtrace_error_swap()
864 event->auxtrace_error.cpu = bswap_32(event->auxtrace_error.cpu); in perf_event__auxtrace_error_swap()
865 event->auxtrace_error.pid = bswap_32(event->auxtrace_error.pid); in perf_event__auxtrace_error_swap()
866 event->auxtrace_error.tid = bswap_32(event->auxtrace_error.tid); in perf_event__auxtrace_error_swap()
867 event->auxtrace_error.fmt = bswap_32(event->auxtrace_error.fmt); in perf_event__auxtrace_error_swap()
868 event->auxtrace_error.ip = bswap_64(event->auxtrace_error.ip); in perf_event__auxtrace_error_swap()
869 if (event->auxtrace_error.fmt) in perf_event__auxtrace_error_swap()
870 event->auxtrace_error.time = bswap_64(event->auxtrace_error.time); in perf_event__auxtrace_error_swap()
873 static void perf_event__thread_map_swap(union perf_event *event, in perf_event__thread_map_swap() argument
878 event->thread_map.nr = bswap_64(event->thread_map.nr); in perf_event__thread_map_swap()
880 for (i = 0; i < event->thread_map.nr; i++) in perf_event__thread_map_swap()
881 event->thread_map.entries[i].pid = bswap_64(event->thread_map.entries[i].pid); in perf_event__thread_map_swap()
884 static void perf_event__cpu_map_swap(union perf_event *event, in perf_event__cpu_map_swap() argument
887 struct perf_record_cpu_map_data *data = &event->cpu_map.data; in perf_event__cpu_map_swap()
892 data->type = bswap_64(data->type); in perf_event__cpu_map_swap()
894 switch (data->type) { in perf_event__cpu_map_swap()
896 cpus = (struct cpu_map_entries *)data->data; in perf_event__cpu_map_swap()
898 cpus->nr = bswap_16(cpus->nr); in perf_event__cpu_map_swap()
900 for (i = 0; i < cpus->nr; i++) in perf_event__cpu_map_swap()
901 cpus->cpu[i] = bswap_16(cpus->cpu[i]); in perf_event__cpu_map_swap()
904 mask = (struct perf_record_record_cpu_map *)data->data; in perf_event__cpu_map_swap()
906 mask->nr = bswap_16(mask->nr); in perf_event__cpu_map_swap()
907 mask->long_size = bswap_16(mask->long_size); in perf_event__cpu_map_swap()
909 switch (mask->long_size) { in perf_event__cpu_map_swap()
910 case 4: mem_bswap_32(&mask->mask, mask->nr); break; in perf_event__cpu_map_swap()
911 case 8: mem_bswap_64(&mask->mask, mask->nr); break; in perf_event__cpu_map_swap()
920 static void perf_event__stat_config_swap(union perf_event *event, in perf_event__stat_config_swap() argument
925 size = event->stat_config.nr * sizeof(event->stat_config.data[0]); in perf_event__stat_config_swap()
927 mem_bswap_64(&event->stat_config.nr, size); in perf_event__stat_config_swap()
930 static void perf_event__stat_swap(union perf_event *event, in perf_event__stat_swap() argument
933 event->stat.id = bswap_64(event->stat.id); in perf_event__stat_swap()
934 event->stat.thread = bswap_32(event->stat.thread); in perf_event__stat_swap()
935 event->stat.cpu = bswap_32(event->stat.cpu); in perf_event__stat_swap()
936 event->stat.val = bswap_64(event->stat.val); in perf_event__stat_swap()
937 event->stat.ena = bswap_64(event->stat.ena); in perf_event__stat_swap()
938 event->stat.run = bswap_64(event->stat.run); in perf_event__stat_swap()
941 static void perf_event__stat_round_swap(union perf_event *event, in perf_event__stat_round_swap() argument
944 event->stat_round.type = bswap_64(event->stat_round.type); in perf_event__stat_round_swap()
945 event->stat_round.time = bswap_64(event->stat_round.time); in perf_event__stat_round_swap()
948 static void perf_event__time_conv_swap(union perf_event *event, in perf_event__time_conv_swap() argument
951 event->time_conv.time_shift = bswap_64(event->time_conv.time_shift); in perf_event__time_conv_swap()
952 event->time_conv.time_mult = bswap_64(event->time_conv.time_mult); in perf_event__time_conv_swap()
953 event->time_conv.time_zero = bswap_64(event->time_conv.time_zero); in perf_event__time_conv_swap()
955 if (event_contains(event->time_conv, time_cycles)) { in perf_event__time_conv_swap()
956 event->time_conv.time_cycles = bswap_64(event->time_conv.time_cycles); in perf_event__time_conv_swap()
957 event->time_conv.time_mask = bswap_64(event->time_conv.time_mask); in perf_event__time_conv_swap()
961 typedef void (*perf_event__swap_op)(union perf_event *event,
1003 * event.
1017 * - | 4 <--- max recorded
1025 * 5 | 7 <---- max recorded
1035 * - | 10
1041 union perf_event *event __maybe_unused, in process_finished_round()
1049 int perf_session__queue_event(struct perf_session *s, union perf_event *event, in perf_session__queue_event() argument
1052 return ordered_events__queue(&s->ordered_events, event, timestamp, file_offset); in perf_session__queue_event()
1057 struct ip_callchain *callchain = sample->callchain; in callchain__lbr_callstack_printf()
1058 struct branch_stack *lbr_stack = sample->branch_stack; in callchain__lbr_callstack_printf()
1060 u64 kernel_callchain_nr = callchain->nr; in callchain__lbr_callstack_printf()
1064 if (callchain->ips[i] == PERF_CONTEXT_USER) in callchain__lbr_callstack_printf()
1068 if ((i != kernel_callchain_nr) && lbr_stack->nr) { in callchain__lbr_callstack_printf()
1080 * "A"->"B"->"C"->"D". in callchain__lbr_callstack_printf()
1082 * "C"->"D", "B"->"C", "A"->"B". in callchain__lbr_callstack_printf()
1086 total_nr = i + 1 + lbr_stack->nr + 1; in callchain__lbr_callstack_printf()
1093 i, callchain->ips[i]); in callchain__lbr_callstack_printf()
1097 for (i = 0; i < lbr_stack->nr; i++) in callchain__lbr_callstack_printf()
1107 struct ip_callchain *callchain = sample->callchain; in callchain__printf()
1112 printf("... FP chain: nr:%" PRIu64 "\n", callchain->nr); in callchain__printf()
1114 for (i = 0; i < callchain->nr; i++) in callchain__printf()
1116 i, callchain->ips[i]); in callchain__printf()
1126 sample->branch_stack->nr); in branch_stack__printf()
1128 for (i = 0; i < sample->branch_stack->nr; i++) { in branch_stack__printf()
1132 printf("..... %2"PRIu64": %016" PRIx64 " -> %016" PRIx64 " %hu cycles %s%s%s%s %x\n", in branch_stack__printf()
1133 i, e->from, e->to, in branch_stack__printf()
1134 (unsigned short)e->flags.cycles, in branch_stack__printf()
1135 e->flags.mispred ? "M" : " ", in branch_stack__printf()
1136 e->flags.predicted ? "P" : " ", in branch_stack__printf()
1137 e->flags.abort ? "A" : " ", in branch_stack__printf()
1138 e->flags.in_tx ? "T" : " ", in branch_stack__printf()
1139 (unsigned)e->flags.reserved); in branch_stack__printf()
1142 i, i > 0 ? e->from : e->to); in branch_stack__printf()
1154 printf(".... %-5s 0x%016" PRIx64 "\n", in regs_dump__printf()
1161 [PERF_SAMPLE_REGS_ABI_32] = "32-bit",
1162 [PERF_SAMPLE_REGS_ABI_64] = "64-bit",
1167 if (d->abi > PERF_SAMPLE_REGS_ABI_64) in regs_dump_abi()
1170 return regs_abi[d->abi]; in regs_dump_abi()
1175 u64 mask = regs->mask; in regs__printf()
1182 regs_dump__printf(mask, regs->regs); in regs__printf()
1187 struct regs_dump *user_regs = &sample->user_regs; in regs_user__printf()
1189 if (user_regs->regs) in regs_user__printf()
1195 struct regs_dump *intr_regs = &sample->intr_regs; in regs_intr__printf()
1197 if (intr_regs->regs) in regs_intr__printf()
1204 dump->size, dump->offset); in stack_user__printf()
1208 union perf_event *event, in perf_evlist__print_tstamp() argument
1213 if (event->header.type != PERF_RECORD_SAMPLE && in perf_evlist__print_tstamp()
1215 fputs("-1 -1 ", stdout); in perf_evlist__print_tstamp()
1220 printf("%u ", sample->cpu); in perf_evlist__print_tstamp()
1223 printf("%" PRIu64 " ", sample->time); in perf_evlist__print_tstamp()
1232 sample->read.time_enabled); in sample_read__printf()
1236 sample->read.time_running); in sample_read__printf()
1241 printf(".... group nr %" PRIu64 "\n", sample->read.group.nr); in sample_read__printf()
1243 for (i = 0; i < sample->read.group.nr; i++) { in sample_read__printf()
1246 value = &sample->read.group.values[i]; in sample_read__printf()
1249 value->id, value->value); in sample_read__printf()
1253 sample->read.one.id, sample->read.one.value); in sample_read__printf()
1256 static void dump_event(struct evlist *evlist, union perf_event *event, in dump_event() argument
1262 printf("\n%#" PRIx64 " [%#x]: event: %d\n", in dump_event()
1263 file_offset, event->header.size, event->header.type); in dump_event()
1265 trace_event(event); in dump_event()
1266 if (event->header.type == PERF_RECORD_SAMPLE && evlist->trace_event_sample_raw) in dump_event()
1267 evlist->trace_event_sample_raw(evlist, event, sample); in dump_event()
1270 perf_evlist__print_tstamp(evlist, event, sample); in dump_event()
1273 event->header.size, perf_event__name(event->header.type)); in dump_event()
1276 static void dump_sample(struct evsel *evsel, union perf_event *event, in dump_sample() argument
1285 event->header.misc, sample->pid, sample->tid, sample->ip, in dump_sample()
1286 sample->period, sample->addr); in dump_sample()
1288 sample_type = evsel->core.attr.sample_type; in dump_sample()
1303 stack_user__printf(&sample->user_stack); in dump_sample()
1306 printf("... weight: %" PRIu64 "\n", sample->weight); in dump_sample()
1309 printf(" . data_src: 0x%"PRIx64"\n", sample->data_src); in dump_sample()
1312 printf(" .. phys_addr: 0x%"PRIx64"\n", sample->phys_addr); in dump_sample()
1315 printf("... transaction: %" PRIx64 "\n", sample->transaction); in dump_sample()
1318 sample_read__printf(sample, evsel->core.attr.read_format); in dump_sample()
1321 static void dump_read(struct evsel *evsel, union perf_event *event) in dump_read() argument
1323 struct perf_record_read *read_event = &event->read; in dump_read()
1329 printf(": %d %d %s %" PRI_lu64 "\n", event->read.pid, event->read.tid, in dump_read()
1330 evsel__name(evsel), event->read.value); in dump_read()
1335 read_format = evsel->core.attr.read_format; in dump_read()
1338 printf("... time enabled : %" PRI_lu64 "\n", read_event->time_enabled); in dump_read()
1341 printf("... time running : %" PRI_lu64 "\n", read_event->time_running); in dump_read()
1344 printf("... id : %" PRI_lu64 "\n", read_event->id); in dump_read()
1348 union perf_event *event, in machines__find_for_cpumode() argument
1354 ((sample->cpumode == PERF_RECORD_MISC_GUEST_KERNEL) || in machines__find_for_cpumode()
1355 (sample->cpumode == PERF_RECORD_MISC_GUEST_USER))) { in machines__find_for_cpumode()
1358 if (event->header.type == PERF_RECORD_MMAP in machines__find_for_cpumode()
1359 || event->header.type == PERF_RECORD_MMAP2) in machines__find_for_cpumode()
1360 pid = event->mmap.pid; in machines__find_for_cpumode()
1362 pid = sample->pid; in machines__find_for_cpumode()
1370 return &machines->host; in machines__find_for_cpumode()
1375 union perf_event *event, in deliver_sample_value() argument
1380 struct perf_sample_id *sid = perf_evlist__id2sid(evlist, v->id); in deliver_sample_value()
1384 sample->id = v->id; in deliver_sample_value()
1385 sample->period = v->value - sid->period; in deliver_sample_value()
1386 sid->period = v->value; in deliver_sample_value()
1389 if (!sid || sid->evsel == NULL) { in deliver_sample_value()
1390 ++evlist->stats.nr_unknown_id; in deliver_sample_value()
1398 if (!sample->period) in deliver_sample_value()
1401 evsel = container_of(sid->evsel, struct evsel, core); in deliver_sample_value()
1402 return tool->sample(tool, event, sample, evsel, machine); in deliver_sample_value()
1407 union perf_event *event, in deliver_sample_group() argument
1411 int ret = -EINVAL; in deliver_sample_group()
1414 for (i = 0; i < sample->read.group.nr; i++) { in deliver_sample_group()
1415 ret = deliver_sample_value(evlist, tool, event, sample, in deliver_sample_group()
1416 &sample->read.group.values[i], in deliver_sample_group()
1428 union perf_event *event, in perf_evlist__deliver_sample() argument
1434 u64 sample_type = evsel->core.attr.sample_type; in perf_evlist__deliver_sample()
1435 u64 read_format = evsel->core.attr.read_format; in perf_evlist__deliver_sample()
1439 return tool->sample(tool, event, sample, evsel, machine); in perf_evlist__deliver_sample()
1443 return deliver_sample_group(evlist, tool, event, sample, in perf_evlist__deliver_sample()
1446 return deliver_sample_value(evlist, tool, event, sample, in perf_evlist__deliver_sample()
1447 &sample->read.one, machine); in perf_evlist__deliver_sample()
1452 union perf_event *event, in machines__deliver_event() argument
1459 dump_event(evlist, event, file_offset, sample); in machines__deliver_event()
1461 evsel = perf_evlist__id2evsel(evlist, sample->id); in machines__deliver_event()
1463 machine = machines__find_for_cpumode(machines, event, sample); in machines__deliver_event()
1465 switch (event->header.type) { in machines__deliver_event()
1468 ++evlist->stats.nr_unknown_id; in machines__deliver_event()
1471 dump_sample(evsel, event, sample); in machines__deliver_event()
1473 ++evlist->stats.nr_unprocessable_samples; in machines__deliver_event()
1476 return perf_evlist__deliver_sample(evlist, tool, event, sample, evsel, machine); in machines__deliver_event()
1478 return tool->mmap(tool, event, sample, machine); in machines__deliver_event()
1480 if (event->header.misc & PERF_RECORD_MISC_PROC_MAP_PARSE_TIMEOUT) in machines__deliver_event()
1481 ++evlist->stats.nr_proc_map_timeout; in machines__deliver_event()
1482 return tool->mmap2(tool, event, sample, machine); in machines__deliver_event()
1484 return tool->comm(tool, event, sample, machine); in machines__deliver_event()
1486 return tool->namespaces(tool, event, sample, machine); in machines__deliver_event()
1488 return tool->cgroup(tool, event, sample, machine); in machines__deliver_event()
1490 return tool->fork(tool, event, sample, machine); in machines__deliver_event()
1492 return tool->exit(tool, event, sample, machine); in machines__deliver_event()
1494 if (tool->lost == perf_event__process_lost) in machines__deliver_event()
1495 evlist->stats.total_lost += event->lost.lost; in machines__deliver_event()
1496 return tool->lost(tool, event, sample, machine); in machines__deliver_event()
1498 if (tool->lost_samples == perf_event__process_lost_samples) in machines__deliver_event()
1499 evlist->stats.total_lost_samples += event->lost_samples.lost; in machines__deliver_event()
1500 return tool->lost_samples(tool, event, sample, machine); in machines__deliver_event()
1502 dump_read(evsel, event); in machines__deliver_event()
1503 return tool->read(tool, event, sample, evsel, machine); in machines__deliver_event()
1505 return tool->throttle(tool, event, sample, machine); in machines__deliver_event()
1507 return tool->unthrottle(tool, event, sample, machine); in machines__deliver_event()
1509 if (tool->aux == perf_event__process_aux) { in machines__deliver_event()
1510 if (event->aux.flags & PERF_AUX_FLAG_TRUNCATED) in machines__deliver_event()
1511 evlist->stats.total_aux_lost += 1; in machines__deliver_event()
1512 if (event->aux.flags & PERF_AUX_FLAG_PARTIAL) in machines__deliver_event()
1513 evlist->stats.total_aux_partial += 1; in machines__deliver_event()
1515 return tool->aux(tool, event, sample, machine); in machines__deliver_event()
1517 return tool->itrace_start(tool, event, sample, machine); in machines__deliver_event()
1520 return tool->context_switch(tool, event, sample, machine); in machines__deliver_event()
1522 return tool->ksymbol(tool, event, sample, machine); in machines__deliver_event()
1524 return tool->bpf(tool, event, sample, machine); in machines__deliver_event()
1526 return tool->text_poke(tool, event, sample, machine); in machines__deliver_event()
1528 ++evlist->stats.nr_unknown_events; in machines__deliver_event()
1529 return -1; in machines__deliver_event()
1534 union perf_event *event, in perf_session__deliver_event() argument
1541 ret = perf_evlist__parse_sample(session->evlist, event, &sample); in perf_session__deliver_event()
1547 ret = auxtrace__process_event(session, event, &sample, tool); in perf_session__deliver_event()
1553 ret = machines__deliver_event(&session->machines, session->evlist, in perf_session__deliver_event()
1554 event, &sample, tool, file_offset); in perf_session__deliver_event()
1563 union perf_event *event, in perf_session__process_user_event() argument
1566 struct ordered_events *oe = &session->ordered_events; in perf_session__process_user_event()
1567 struct perf_tool *tool = session->tool; in perf_session__process_user_event()
1569 int fd = perf_data__fd(session->data); in perf_session__process_user_event()
1572 if (event->header.type != PERF_RECORD_COMPRESSED || in perf_session__process_user_event()
1573 tool->compressed == perf_session__process_compressed_event_stub) in perf_session__process_user_event()
1574 dump_event(session->evlist, event, file_offset, &sample); in perf_session__process_user_event()
1577 switch (event->header.type) { in perf_session__process_user_event()
1579 err = tool->attr(tool, event, &session->evlist); in perf_session__process_user_event()
1586 return tool->event_update(tool, event, &session->evlist); in perf_session__process_user_event()
1599 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1601 return tool->tracing_data(session, event); in perf_session__process_user_event()
1603 return tool->build_id(session, event); in perf_session__process_user_event()
1605 return tool->finished_round(tool, event, oe); in perf_session__process_user_event()
1607 return tool->id_index(session, event); in perf_session__process_user_event()
1609 return tool->auxtrace_info(session, event); in perf_session__process_user_event()
1612 lseek(fd, file_offset + event->header.size, SEEK_SET); in perf_session__process_user_event()
1613 return tool->auxtrace(session, event); in perf_session__process_user_event()
1615 perf_session__auxtrace_error_inc(session, event); in perf_session__process_user_event()
1616 return tool->auxtrace_error(session, event); in perf_session__process_user_event()
1618 return tool->thread_map(session, event); in perf_session__process_user_event()
1620 return tool->cpu_map(session, event); in perf_session__process_user_event()
1622 return tool->stat_config(session, event); in perf_session__process_user_event()
1624 return tool->stat(session, event); in perf_session__process_user_event()
1626 return tool->stat_round(session, event); in perf_session__process_user_event()
1628 session->time_conv = event->time_conv; in perf_session__process_user_event()
1629 return tool->time_conv(session, event); in perf_session__process_user_event()
1631 return tool->feature(session, event); in perf_session__process_user_event()
1633 err = tool->compressed(session, event, file_offset); in perf_session__process_user_event()
1635 dump_event(session->evlist, event, file_offset, &sample); in perf_session__process_user_event()
1638 return -EINVAL; in perf_session__process_user_event()
1643 union perf_event *event, in perf_session__deliver_synth_event() argument
1646 struct evlist *evlist = session->evlist; in perf_session__deliver_synth_event()
1647 struct perf_tool *tool = session->tool; in perf_session__deliver_synth_event()
1649 events_stats__inc(&evlist->stats, event->header.type); in perf_session__deliver_synth_event()
1651 if (event->header.type >= PERF_RECORD_USER_TYPE_START) in perf_session__deliver_synth_event()
1652 return perf_session__process_user_event(session, event, 0); in perf_session__deliver_synth_event()
1654 return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); in perf_session__deliver_synth_event()
1657 static void event_swap(union perf_event *event, bool sample_id_all) in event_swap() argument
1661 swap = perf_event__swap_ops[event->header.type]; in event_swap()
1663 swap(event, sample_id_all); in event_swap()
1671 union perf_event *event; in perf_session__peek_event() local
1675 if (session->one_mmap && !session->header.needs_swap) { in perf_session__peek_event()
1676 event = file_offset - session->one_mmap_offset + in perf_session__peek_event()
1677 session->one_mmap_addr; in perf_session__peek_event()
1681 if (perf_data__is_pipe(session->data)) in perf_session__peek_event()
1682 return -1; in perf_session__peek_event()
1684 fd = perf_data__fd(session->data); in perf_session__peek_event()
1688 return -1; in perf_session__peek_event()
1690 if (lseek(fd, file_offset, SEEK_SET) == (off_t)-1 || in perf_session__peek_event()
1692 return -1; in perf_session__peek_event()
1694 event = (union perf_event *)buf; in perf_session__peek_event()
1696 if (session->header.needs_swap) in perf_session__peek_event()
1697 perf_event_header__bswap(&event->header); in perf_session__peek_event()
1699 if (event->header.size < hdr_sz || event->header.size > buf_sz) in perf_session__peek_event()
1700 return -1; in perf_session__peek_event()
1703 rest = event->header.size - hdr_sz; in perf_session__peek_event()
1706 return -1; in perf_session__peek_event()
1708 if (session->header.needs_swap) in perf_session__peek_event()
1709 event_swap(event, evlist__sample_id_all(session->evlist)); in perf_session__peek_event()
1713 if (sample && event->header.type < PERF_RECORD_USER_TYPE_START && in perf_session__peek_event()
1714 perf_evlist__parse_sample(session->evlist, event, sample)) in perf_session__peek_event()
1715 return -1; in perf_session__peek_event()
1717 *event_ptr = event; in perf_session__peek_event()
1727 union perf_event *event; in perf_session__peek_events() local
1732 PERF_SAMPLE_MAX_SIZE, &event, in perf_session__peek_events()
1737 err = cb(session, event, offset, data); in perf_session__peek_events()
1741 offset += event->header.size; in perf_session__peek_events()
1742 if (event->header.type == PERF_RECORD_AUXTRACE) in perf_session__peek_events()
1743 offset += event->auxtrace.size; in perf_session__peek_events()
1751 union perf_event *event, u64 file_offset) in perf_session__process_event() argument
1753 struct evlist *evlist = session->evlist; in perf_session__process_event()
1754 struct perf_tool *tool = session->tool; in perf_session__process_event()
1757 if (session->header.needs_swap) in perf_session__process_event()
1758 event_swap(event, evlist__sample_id_all(evlist)); in perf_session__process_event()
1760 if (event->header.type >= PERF_RECORD_HEADER_MAX) in perf_session__process_event()
1761 return -EINVAL; in perf_session__process_event()
1763 events_stats__inc(&evlist->stats, event->header.type); in perf_session__process_event()
1765 if (event->header.type >= PERF_RECORD_USER_TYPE_START) in perf_session__process_event()
1766 return perf_session__process_user_event(session, event, file_offset); in perf_session__process_event()
1768 if (tool->ordered_events) { in perf_session__process_event()
1769 u64 timestamp = -1ULL; in perf_session__process_event()
1771 ret = perf_evlist__parse_sample_timestamp(evlist, event, &timestamp); in perf_session__process_event()
1772 if (ret && ret != -1) in perf_session__process_event()
1775 ret = perf_session__queue_event(session, event, timestamp, file_offset); in perf_session__process_event()
1776 if (ret != -ETIME) in perf_session__process_event()
1780 return perf_session__deliver_event(session, event, tool, file_offset); in perf_session__process_event()
1785 hdr->type = bswap_32(hdr->type); in perf_event_header__bswap()
1786 hdr->misc = bswap_16(hdr->misc); in perf_event_header__bswap()
1787 hdr->size = bswap_16(hdr->size); in perf_event_header__bswap()
1792 return machine__findnew_thread(&session->machines.host, -1, pid); in perf_session__findnew()
1800 * example get_idle_thread() in builtin-sched.c, or thread_stack__per_cpu().
1807 thread = machine__findnew_thread(&session->machines.host, 0, 0); in perf_session__register_idle_thread()
1810 err = -1; in perf_session__register_idle_thread()
1815 err = -1; in perf_session__register_idle_thread()
1826 const struct ordered_events *oe = &session->ordered_events; in perf_session__warn_order()
1830 evlist__for_each_entry(session->evlist, evsel) { in perf_session__warn_order()
1831 if (evsel->core.attr.write_backward) in perf_session__warn_order()
1837 if (oe->nr_unordered_events != 0) in perf_session__warn_order()
1838 ui__warning("%u out of order events recorded.\n", oe->nr_unordered_events); in perf_session__warn_order()
1843 const struct events_stats *stats = &session->evlist->stats; in perf_session__warn_about_errors()
1845 if (session->tool->lost == perf_event__process_lost && in perf_session__warn_about_errors()
1846 stats->nr_events[PERF_RECORD_LOST] != 0) { in perf_session__warn_about_errors()
1849 stats->nr_events[0], in perf_session__warn_about_errors()
1850 stats->nr_events[PERF_RECORD_LOST]); in perf_session__warn_about_errors()
1853 if (session->tool->lost_samples == perf_event__process_lost_samples) { in perf_session__warn_about_errors()
1856 drop_rate = (double)stats->total_lost_samples / in perf_session__warn_about_errors()
1857 (double) (stats->nr_events[PERF_RECORD_SAMPLE] + stats->total_lost_samples); in perf_session__warn_about_errors()
1860 stats->nr_events[PERF_RECORD_SAMPLE] + stats->total_lost_samples, in perf_session__warn_about_errors()
1865 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1866 stats->total_aux_lost != 0) { in perf_session__warn_about_errors()
1868 stats->total_aux_lost, in perf_session__warn_about_errors()
1869 stats->nr_events[PERF_RECORD_AUX]); in perf_session__warn_about_errors()
1872 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1873 stats->total_aux_partial != 0) { in perf_session__warn_about_errors()
1881 stats->total_aux_partial, in perf_session__warn_about_errors()
1882 stats->nr_events[PERF_RECORD_AUX], in perf_session__warn_about_errors()
1889 if (stats->nr_unknown_events != 0) { in perf_session__warn_about_errors()
1894 "reporting to linux-kernel@vger.kernel.org.\n\n", in perf_session__warn_about_errors()
1895 stats->nr_unknown_events); in perf_session__warn_about_errors()
1898 if (stats->nr_unknown_id != 0) { in perf_session__warn_about_errors()
1900 stats->nr_unknown_id); in perf_session__warn_about_errors()
1903 if (stats->nr_invalid_chains != 0) { in perf_session__warn_about_errors()
1906 "Consider reporting to linux-kernel@vger.kernel.org.\n\n", in perf_session__warn_about_errors()
1907 stats->nr_invalid_chains, in perf_session__warn_about_errors()
1908 stats->nr_events[PERF_RECORD_SAMPLE]); in perf_session__warn_about_errors()
1911 if (stats->nr_unprocessable_samples != 0) { in perf_session__warn_about_errors()
1914 stats->nr_unprocessable_samples); in perf_session__warn_about_errors()
1921 if (stats->nr_proc_map_timeout != 0) { in perf_session__warn_about_errors()
1922 ui__warning("%d map information files for pre-existing threads were\n" in perf_session__warn_about_errors()
1925 "threads by running with -v and redirecting the output\n" in perf_session__warn_about_errors()
1928 "Increase it by --proc-map-timeout\n", in perf_session__warn_about_errors()
1929 stats->nr_proc_map_timeout); in perf_session__warn_about_errors()
1941 return machines__for_each_thread(&session->machines, in perf_session__flush_thread_stacks()
1952 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_pipe_events()
1953 struct perf_tool *tool = session->tool; in __perf_session__process_pipe_events()
1954 int fd = perf_data__fd(session->data); in __perf_session__process_pipe_events()
1955 union perf_event *event; in __perf_session__process_pipe_events() local
1970 return -errno; in __perf_session__process_pipe_events()
1973 event = buf; in __perf_session__process_pipe_events()
1974 err = readn(fd, event, sizeof(struct perf_event_header)); in __perf_session__process_pipe_events()
1979 pr_err("failed to read event header\n"); in __perf_session__process_pipe_events()
1983 if (session->header.needs_swap) in __perf_session__process_pipe_events()
1984 perf_event_header__bswap(&event->header); in __perf_session__process_pipe_events()
1986 size = event->header.size; in __perf_session__process_pipe_events()
1988 pr_err("bad event header size\n"); in __perf_session__process_pipe_events()
1995 pr_err("failed to allocate memory to read event\n"); in __perf_session__process_pipe_events()
2000 event = buf; in __perf_session__process_pipe_events()
2002 p = event; in __perf_session__process_pipe_events()
2005 if (size - sizeof(struct perf_event_header)) { in __perf_session__process_pipe_events()
2006 err = readn(fd, p, size - sizeof(struct perf_event_header)); in __perf_session__process_pipe_events()
2009 pr_err("unexpected end of event stream\n"); in __perf_session__process_pipe_events()
2013 pr_err("failed to read event data\n"); in __perf_session__process_pipe_events()
2018 if ((skip = perf_session__process_event(session, event, head)) < 0) { in __perf_session__process_pipe_events()
2020 head, event->header.size, event->header.type); in __perf_session__process_pipe_events()
2021 err = -EINVAL; in __perf_session__process_pipe_events()
2047 if (!tool->no_warn) in __perf_session__process_pipe_events()
2049 ordered_events__free(&session->ordered_events); in __perf_session__process_pipe_events()
2058 union perf_event *event; in prefetch_event() local
2063 * the size of the event in the headers. in prefetch_event()
2065 if (head + sizeof(event->header) > mmap_size) in prefetch_event()
2068 event = (union perf_event *)(buf + head); in prefetch_event()
2070 perf_event_header__bswap(&event->header); in prefetch_event()
2072 event_size = event->header.size; in prefetch_event()
2074 return event; in prefetch_event()
2076 /* We're not fetching the event so swap back again */ in prefetch_event()
2078 perf_event_header__bswap(&event->header); in prefetch_event()
2080 /* Check if the event fits into the next mmapped buf. */ in prefetch_event()
2081 if (event_size <= mmap_size - head % page_size) { in prefetch_event()
2086 /* Invalid input. Event size should never exceed mmap_size. */ in prefetch_event()
2087 pr_debug("%s: head=%#" PRIx64 " event->header.size=%#x, mmap_size=%#zx:" in prefetch_event()
2096 return prefetch_event(buf, head, mmap_size, needs_swap, ERR_PTR(-EINVAL)); in fetch_mmaped_event()
2109 struct decomp *decomp = session->decomp_last; in __perf_session__process_decomp_events()
2114 while (decomp->head < decomp->size && !session_done()) { in __perf_session__process_decomp_events()
2115 union perf_event *event = fetch_decomp_event(decomp->head, decomp->size, decomp->data, in __perf_session__process_decomp_events() local
2116 session->header.needs_swap); in __perf_session__process_decomp_events()
2118 if (!event) in __perf_session__process_decomp_events()
2121 size = event->header.size; in __perf_session__process_decomp_events()
2124 (skip = perf_session__process_event(session, event, file_pos)) < 0) { in __perf_session__process_decomp_events()
2126 decomp->file_pos + decomp->head, event->header.size, event->header.type); in __perf_session__process_decomp_events()
2127 return -EINVAL; in __perf_session__process_decomp_events()
2133 decomp->head += size; in __perf_session__process_decomp_events()
2154 union perf_event *event,
2168 u64 data_size = rd->data_size; in reader__process_events()
2173 union perf_event *event; in reader__process_events() local
2176 page_offset = page_size * (rd->data_offset / page_size); in reader__process_events()
2178 head = rd->data_offset - page_offset; in reader__process_events()
2182 data_size += rd->data_offset; in reader__process_events()
2187 session->one_mmap = true; in reader__process_events()
2195 if (session->header.needs_swap) { in reader__process_events()
2200 buf = mmap(NULL, mmap_size, mmap_prot, mmap_flags, rd->fd, in reader__process_events()
2204 err = -errno; in reader__process_events()
2208 map_idx = (map_idx + 1) & (ARRAY_SIZE(mmaps) - 1); in reader__process_events()
2210 if (session->one_mmap) { in reader__process_events()
2211 session->one_mmap_addr = buf; in reader__process_events()
2212 session->one_mmap_offset = file_offset; in reader__process_events()
2216 event = fetch_mmaped_event(head, mmap_size, buf, session->header.needs_swap); in reader__process_events()
2217 if (IS_ERR(event)) in reader__process_events()
2218 return PTR_ERR(event); in reader__process_events()
2220 if (!event) { in reader__process_events()
2228 head -= page_offset; in reader__process_events()
2232 size = event->header.size; in reader__process_events()
2234 skip = -EINVAL; in reader__process_events()
2237 (skip = rd->process(session, event, file_pos)) < 0) { in reader__process_events()
2239 file_offset + head, event->header.size, in reader__process_events()
2240 event->header.type, strerror(-skip)); in reader__process_events()
2268 union perf_event *event, in process_simple() argument
2271 return perf_session__process_event(session, event, file_offset); in process_simple()
2277 .fd = perf_data__fd(session->data), in __perf_session__process_events()
2278 .data_size = session->header.data_size, in __perf_session__process_events()
2279 .data_offset = session->header.data_offset, in __perf_session__process_events()
2282 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_events()
2283 struct perf_tool *tool = session->tool; in __perf_session__process_events()
2290 return -1; in __perf_session__process_events()
2307 if (!tool->no_warn) in __perf_session__process_events()
2313 ordered_events__reinit(&session->ordered_events); in __perf_session__process_events()
2315 session->one_mmap = false; in __perf_session__process_events()
2322 return -ENOMEM; in perf_session__process_events()
2324 if (perf_data__is_pipe(session->data)) in perf_session__process_events()
2334 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_traces()
2335 if (evsel->core.attr.type == PERF_TYPE_TRACEPOINT) in perf_session__has_traces()
2351 return -ENOMEM; in map__set_kallsyms_ref_reloc_sym()
2353 ref->name = strdup(symbol_name); in map__set_kallsyms_ref_reloc_sym()
2354 if (ref->name == NULL) { in map__set_kallsyms_ref_reloc_sym()
2356 return -ENOMEM; in map__set_kallsyms_ref_reloc_sym()
2359 bracket = strchr(ref->name, ']'); in map__set_kallsyms_ref_reloc_sym()
2363 ref->addr = addr; in map__set_kallsyms_ref_reloc_sym()
2367 kmap->ref_reloc_sym = ref; in map__set_kallsyms_ref_reloc_sym()
2374 return machines__fprintf_dsos(&session->machines, fp); in perf_session__fprintf_dsos()
2380 return machines__fprintf_dsos_buildid(&session->machines, fp, skip, parm); in perf_session__fprintf_dsos_buildid()
2388 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) in perf_session__fprintf_nr_events()
2393 ret += events_stats__fprintf(&session->evlist->stats, fp); in perf_session__fprintf_nr_events()
2403 return machine__fprintf(&session->machines.host, fp); in perf_session__fprintf()
2411 evlist__for_each_entry(session->evlist, pos) { in perf_session__find_first_evtype()
2412 if (pos->core.attr.type == type) in perf_session__find_first_evtype()
2421 int i, err = -1; in perf_session__cpu_bitmap()
2423 int nr_cpus = min(session->header.env.nr_cpus_avail, MAX_NR_CPUS); in perf_session__cpu_bitmap()
2432 if (!(evsel->core.attr.sample_type & PERF_SAMPLE_CPU)) { in perf_session__cpu_bitmap()
2434 "Remove -C option to proceed.\n"); in perf_session__cpu_bitmap()
2435 return -1; in perf_session__cpu_bitmap()
2442 return -1; in perf_session__cpu_bitmap()
2445 for (i = 0; i < map->nr; i++) { in perf_session__cpu_bitmap()
2446 int cpu = map->map[i]; in perf_session__cpu_bitmap()
2476 union perf_event *event) in perf_event__process_id_index() argument
2478 struct evlist *evlist = session->evlist; in perf_event__process_id_index()
2479 struct perf_record_id_index *ie = &event->id_index; in perf_event__process_id_index()
2482 max_nr = (ie->header.size - sizeof(struct perf_record_id_index)) / in perf_event__process_id_index()
2484 nr = ie->nr; in perf_event__process_id_index()
2486 return -EINVAL; in perf_event__process_id_index()
2492 struct id_index_entry *e = &ie->entries[i]; in perf_event__process_id_index()
2496 fprintf(stdout, " ... id: %"PRI_lu64, e->id); in perf_event__process_id_index()
2497 fprintf(stdout, " idx: %"PRI_lu64, e->idx); in perf_event__process_id_index()
2498 fprintf(stdout, " cpu: %"PRI_ld64, e->cpu); in perf_event__process_id_index()
2499 fprintf(stdout, " tid: %"PRI_ld64"\n", e->tid); in perf_event__process_id_index()
2502 sid = perf_evlist__id2sid(evlist, e->id); in perf_event__process_id_index()
2504 return -ENOENT; in perf_event__process_id_index()
2505 sid->idx = e->idx; in perf_event__process_id_index()
2506 sid->cpu = e->cpu; in perf_event__process_id_index()
2507 sid->tid = e->tid; in perf_event__process_id_index()