| .. | .. |
|---|
| 1 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 2 | 2 | #ifndef __PERF_RECORD_H |
|---|
| 3 | 3 | #define __PERF_RECORD_H |
|---|
| 4 | | - |
|---|
| 5 | | -#include <limits.h> |
|---|
| 4 | +/* |
|---|
| 5 | + * The linux/stddef.h isn't need here, but is needed for __always_inline used |
|---|
| 6 | + * in files included from uapi/linux/perf_event.h such as |
|---|
| 7 | + * /usr/include/linux/swab.h and /usr/include/linux/byteorder/little_endian.h, |
|---|
| 8 | + * detected in at least musl libc, used in Alpine Linux. -acme |
|---|
| 9 | + */ |
|---|
| 6 | 10 | #include <stdio.h> |
|---|
| 7 | | -#include <linux/kernel.h> |
|---|
| 11 | +#include <linux/stddef.h> |
|---|
| 12 | +#include <perf/event.h> |
|---|
| 13 | +#include <linux/types.h> |
|---|
| 8 | 14 | |
|---|
| 9 | | -#include "../perf.h" |
|---|
| 10 | | -#include "build-id.h" |
|---|
| 11 | 15 | #include "perf_regs.h" |
|---|
| 12 | 16 | |
|---|
| 13 | | -struct mmap_event { |
|---|
| 14 | | - struct perf_event_header header; |
|---|
| 15 | | - u32 pid, tid; |
|---|
| 16 | | - u64 start; |
|---|
| 17 | | - u64 len; |
|---|
| 18 | | - u64 pgoff; |
|---|
| 19 | | - char filename[PATH_MAX]; |
|---|
| 20 | | -}; |
|---|
| 17 | +struct dso; |
|---|
| 18 | +struct machine; |
|---|
| 19 | +struct perf_event_attr; |
|---|
| 21 | 20 | |
|---|
| 22 | | -struct mmap2_event { |
|---|
| 23 | | - struct perf_event_header header; |
|---|
| 24 | | - u32 pid, tid; |
|---|
| 25 | | - u64 start; |
|---|
| 26 | | - u64 len; |
|---|
| 27 | | - u64 pgoff; |
|---|
| 28 | | - u32 maj; |
|---|
| 29 | | - u32 min; |
|---|
| 30 | | - u64 ino; |
|---|
| 31 | | - u64 ino_generation; |
|---|
| 32 | | - u32 prot; |
|---|
| 33 | | - u32 flags; |
|---|
| 34 | | - char filename[PATH_MAX]; |
|---|
| 35 | | -}; |
|---|
| 36 | | - |
|---|
| 37 | | -struct comm_event { |
|---|
| 38 | | - struct perf_event_header header; |
|---|
| 39 | | - u32 pid, tid; |
|---|
| 40 | | - char comm[16]; |
|---|
| 41 | | -}; |
|---|
| 42 | | - |
|---|
| 43 | | -struct namespaces_event { |
|---|
| 44 | | - struct perf_event_header header; |
|---|
| 45 | | - u32 pid, tid; |
|---|
| 46 | | - u64 nr_namespaces; |
|---|
| 47 | | - struct perf_ns_link_info link_info[]; |
|---|
| 48 | | -}; |
|---|
| 49 | | - |
|---|
| 50 | | -struct fork_event { |
|---|
| 51 | | - struct perf_event_header header; |
|---|
| 52 | | - u32 pid, ppid; |
|---|
| 53 | | - u32 tid, ptid; |
|---|
| 54 | | - u64 time; |
|---|
| 55 | | -}; |
|---|
| 56 | | - |
|---|
| 57 | | -struct lost_event { |
|---|
| 58 | | - struct perf_event_header header; |
|---|
| 59 | | - u64 id; |
|---|
| 60 | | - u64 lost; |
|---|
| 61 | | -}; |
|---|
| 62 | | - |
|---|
| 63 | | -struct lost_samples_event { |
|---|
| 64 | | - struct perf_event_header header; |
|---|
| 65 | | - u64 lost; |
|---|
| 66 | | -}; |
|---|
| 67 | | - |
|---|
| 21 | +#ifdef __LP64__ |
|---|
| 68 | 22 | /* |
|---|
| 69 | | - * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID |
|---|
| 23 | + * /usr/include/inttypes.h uses just 'lu' for PRIu64, but we end up defining |
|---|
| 24 | + * __u64 as long long unsigned int, and then -Werror=format= kicks in and |
|---|
| 25 | + * complains of the mismatched types, so use these two special extra PRI |
|---|
| 26 | + * macros to overcome that. |
|---|
| 70 | 27 | */ |
|---|
| 71 | | -struct read_event { |
|---|
| 72 | | - struct perf_event_header header; |
|---|
| 73 | | - u32 pid, tid; |
|---|
| 74 | | - u64 value; |
|---|
| 75 | | - u64 time_enabled; |
|---|
| 76 | | - u64 time_running; |
|---|
| 77 | | - u64 id; |
|---|
| 78 | | -}; |
|---|
| 79 | | - |
|---|
| 80 | | -struct throttle_event { |
|---|
| 81 | | - struct perf_event_header header; |
|---|
| 82 | | - u64 time; |
|---|
| 83 | | - u64 id; |
|---|
| 84 | | - u64 stream_id; |
|---|
| 85 | | -}; |
|---|
| 28 | +#define PRI_lu64 "l" PRIu64 |
|---|
| 29 | +#define PRI_lx64 "l" PRIx64 |
|---|
| 30 | +#define PRI_ld64 "l" PRId64 |
|---|
| 31 | +#else |
|---|
| 32 | +#define PRI_lu64 PRIu64 |
|---|
| 33 | +#define PRI_lx64 PRIx64 |
|---|
| 34 | +#define PRI_ld64 PRId64 |
|---|
| 35 | +#endif |
|---|
| 86 | 36 | |
|---|
| 87 | 37 | #define PERF_SAMPLE_MASK \ |
|---|
| 88 | 38 | (PERF_SAMPLE_IP | PERF_SAMPLE_TID | \ |
|---|
| .. | .. |
|---|
| 93 | 43 | |
|---|
| 94 | 44 | /* perf sample has 16 bits size limit */ |
|---|
| 95 | 45 | #define PERF_SAMPLE_MAX_SIZE (1 << 16) |
|---|
| 96 | | - |
|---|
| 97 | | -struct sample_event { |
|---|
| 98 | | - struct perf_event_header header; |
|---|
| 99 | | - u64 array[]; |
|---|
| 100 | | -}; |
|---|
| 101 | 46 | |
|---|
| 102 | 47 | struct regs_dump { |
|---|
| 103 | 48 | u64 abi; |
|---|
| .. | .. |
|---|
| 134 | 79 | |
|---|
| 135 | 80 | struct ip_callchain { |
|---|
| 136 | 81 | u64 nr; |
|---|
| 137 | | - u64 ips[0]; |
|---|
| 82 | + u64 ips[]; |
|---|
| 138 | 83 | }; |
|---|
| 139 | 84 | |
|---|
| 140 | | -struct branch_flags { |
|---|
| 141 | | - u64 mispred:1; |
|---|
| 142 | | - u64 predicted:1; |
|---|
| 143 | | - u64 in_tx:1; |
|---|
| 144 | | - u64 abort:1; |
|---|
| 145 | | - u64 cycles:16; |
|---|
| 146 | | - u64 type:4; |
|---|
| 147 | | - u64 reserved:40; |
|---|
| 148 | | -}; |
|---|
| 149 | | - |
|---|
| 150 | | -struct branch_entry { |
|---|
| 151 | | - u64 from; |
|---|
| 152 | | - u64 to; |
|---|
| 153 | | - struct branch_flags flags; |
|---|
| 154 | | -}; |
|---|
| 155 | | - |
|---|
| 156 | | -struct branch_stack { |
|---|
| 157 | | - u64 nr; |
|---|
| 158 | | - struct branch_entry entries[0]; |
|---|
| 159 | | -}; |
|---|
| 85 | +struct branch_stack; |
|---|
| 160 | 86 | |
|---|
| 161 | 87 | enum { |
|---|
| 162 | 88 | PERF_IP_FLAG_BRANCH = 1ULL << 0, |
|---|
| .. | .. |
|---|
| 188 | 114 | |
|---|
| 189 | 115 | #define MAX_INSN 16 |
|---|
| 190 | 116 | |
|---|
| 117 | +struct aux_sample { |
|---|
| 118 | + u64 size; |
|---|
| 119 | + void *data; |
|---|
| 120 | +}; |
|---|
| 121 | + |
|---|
| 191 | 122 | struct perf_sample { |
|---|
| 192 | 123 | u64 ip; |
|---|
| 193 | 124 | u32 pid, tid; |
|---|
| .. | .. |
|---|
| 198 | 129 | u64 period; |
|---|
| 199 | 130 | u64 weight; |
|---|
| 200 | 131 | u64 transaction; |
|---|
| 132 | + u64 insn_cnt; |
|---|
| 133 | + u64 cyc_cnt; |
|---|
| 201 | 134 | u32 cpu; |
|---|
| 202 | 135 | u32 raw_size; |
|---|
| 203 | 136 | u64 data_src; |
|---|
| 204 | 137 | u64 phys_addr; |
|---|
| 138 | + u64 cgroup; |
|---|
| 205 | 139 | u32 flags; |
|---|
| 206 | 140 | u16 insn_len; |
|---|
| 207 | 141 | u8 cpumode; |
|---|
| 208 | 142 | u16 misc; |
|---|
| 143 | + bool no_hw_idx; /* No hw_idx collected in branch_stack */ |
|---|
| 209 | 144 | char insn[MAX_INSN]; |
|---|
| 210 | 145 | void *raw_data; |
|---|
| 211 | 146 | struct ip_callchain *callchain; |
|---|
| .. | .. |
|---|
| 214 | 149 | struct regs_dump intr_regs; |
|---|
| 215 | 150 | struct stack_dump user_stack; |
|---|
| 216 | 151 | struct sample_read read; |
|---|
| 152 | + struct aux_sample aux_sample; |
|---|
| 217 | 153 | }; |
|---|
| 218 | 154 | |
|---|
| 219 | 155 | #define PERF_MEM_DATA_SRC_NONE \ |
|---|
| .. | .. |
|---|
| 222 | 158 | PERF_MEM_S(SNOOP, NA) |\ |
|---|
| 223 | 159 | PERF_MEM_S(LOCK, NA) |\ |
|---|
| 224 | 160 | PERF_MEM_S(TLB, NA)) |
|---|
| 225 | | - |
|---|
| 226 | | -struct build_id_event { |
|---|
| 227 | | - struct perf_event_header header; |
|---|
| 228 | | - pid_t pid; |
|---|
| 229 | | - u8 build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))]; |
|---|
| 230 | | - char filename[]; |
|---|
| 231 | | -}; |
|---|
| 232 | | - |
|---|
| 233 | | -enum perf_user_event_type { /* above any possible kernel type */ |
|---|
| 234 | | - PERF_RECORD_USER_TYPE_START = 64, |
|---|
| 235 | | - PERF_RECORD_HEADER_ATTR = 64, |
|---|
| 236 | | - PERF_RECORD_HEADER_EVENT_TYPE = 65, /* deprecated */ |
|---|
| 237 | | - PERF_RECORD_HEADER_TRACING_DATA = 66, |
|---|
| 238 | | - PERF_RECORD_HEADER_BUILD_ID = 67, |
|---|
| 239 | | - PERF_RECORD_FINISHED_ROUND = 68, |
|---|
| 240 | | - PERF_RECORD_ID_INDEX = 69, |
|---|
| 241 | | - PERF_RECORD_AUXTRACE_INFO = 70, |
|---|
| 242 | | - PERF_RECORD_AUXTRACE = 71, |
|---|
| 243 | | - PERF_RECORD_AUXTRACE_ERROR = 72, |
|---|
| 244 | | - PERF_RECORD_THREAD_MAP = 73, |
|---|
| 245 | | - PERF_RECORD_CPU_MAP = 74, |
|---|
| 246 | | - PERF_RECORD_STAT_CONFIG = 75, |
|---|
| 247 | | - PERF_RECORD_STAT = 76, |
|---|
| 248 | | - PERF_RECORD_STAT_ROUND = 77, |
|---|
| 249 | | - PERF_RECORD_EVENT_UPDATE = 78, |
|---|
| 250 | | - PERF_RECORD_TIME_CONV = 79, |
|---|
| 251 | | - PERF_RECORD_HEADER_FEATURE = 80, |
|---|
| 252 | | - PERF_RECORD_HEADER_MAX |
|---|
| 253 | | -}; |
|---|
| 254 | | - |
|---|
| 255 | | -enum auxtrace_error_type { |
|---|
| 256 | | - PERF_AUXTRACE_ERROR_ITRACE = 1, |
|---|
| 257 | | - PERF_AUXTRACE_ERROR_MAX |
|---|
| 258 | | -}; |
|---|
| 259 | 161 | |
|---|
| 260 | 162 | /* Attribute type for custom synthesized events */ |
|---|
| 261 | 163 | #define PERF_TYPE_SYNTH (INT_MAX + 1U) |
|---|
| .. | .. |
|---|
| 378 | 280 | |
|---|
| 379 | 281 | #define perf_sample__bad_synth_size(s, d) ((s)->raw_size < sizeof(d) - 4) |
|---|
| 380 | 282 | |
|---|
| 381 | | -/* |
|---|
| 382 | | - * The kernel collects the number of events it couldn't send in a stretch and |
|---|
| 383 | | - * when possible sends this number in a PERF_RECORD_LOST event. The number of |
|---|
| 384 | | - * such "chunks" of lost events is stored in .nr_events[PERF_EVENT_LOST] while |
|---|
| 385 | | - * total_lost tells exactly how many events the kernel in fact lost, i.e. it is |
|---|
| 386 | | - * the sum of all struct lost_event.lost fields reported. |
|---|
| 387 | | - * |
|---|
| 388 | | - * The kernel discards mixed up samples and sends the number in a |
|---|
| 389 | | - * PERF_RECORD_LOST_SAMPLES event. The number of lost-samples events is stored |
|---|
| 390 | | - * in .nr_events[PERF_RECORD_LOST_SAMPLES] while total_lost_samples tells |
|---|
| 391 | | - * exactly how many samples the kernel in fact dropped, i.e. it is the sum of |
|---|
| 392 | | - * all struct lost_samples_event.lost fields reported. |
|---|
| 393 | | - * |
|---|
| 394 | | - * The total_period is needed because by default auto-freq is used, so |
|---|
| 395 | | - * multipling nr_events[PERF_EVENT_SAMPLE] by a frequency isn't possible to get |
|---|
| 396 | | - * the total number of low level events, it is necessary to to sum all struct |
|---|
| 397 | | - * sample_event.period and stash the result in total_period. |
|---|
| 398 | | - */ |
|---|
| 399 | | -struct events_stats { |
|---|
| 400 | | - u64 total_period; |
|---|
| 401 | | - u64 total_non_filtered_period; |
|---|
| 402 | | - u64 total_lost; |
|---|
| 403 | | - u64 total_lost_samples; |
|---|
| 404 | | - u64 total_aux_lost; |
|---|
| 405 | | - u64 total_aux_partial; |
|---|
| 406 | | - u64 total_invalid_chains; |
|---|
| 407 | | - u32 nr_events[PERF_RECORD_HEADER_MAX]; |
|---|
| 408 | | - u32 nr_non_filtered_samples; |
|---|
| 409 | | - u32 nr_lost_warned; |
|---|
| 410 | | - u32 nr_unknown_events; |
|---|
| 411 | | - u32 nr_invalid_chains; |
|---|
| 412 | | - u32 nr_unknown_id; |
|---|
| 413 | | - u32 nr_unprocessable_samples; |
|---|
| 414 | | - u32 nr_auxtrace_errors[PERF_AUXTRACE_ERROR_MAX]; |
|---|
| 415 | | - u32 nr_proc_map_timeout; |
|---|
| 416 | | -}; |
|---|
| 417 | | - |
|---|
| 418 | | -enum { |
|---|
| 419 | | - PERF_CPU_MAP__CPUS = 0, |
|---|
| 420 | | - PERF_CPU_MAP__MASK = 1, |
|---|
| 421 | | -}; |
|---|
| 422 | | - |
|---|
| 423 | | -struct cpu_map_entries { |
|---|
| 424 | | - u16 nr; |
|---|
| 425 | | - u16 cpu[]; |
|---|
| 426 | | -}; |
|---|
| 427 | | - |
|---|
| 428 | | -struct cpu_map_mask { |
|---|
| 429 | | - u16 nr; |
|---|
| 430 | | - u16 long_size; |
|---|
| 431 | | - unsigned long mask[]; |
|---|
| 432 | | -}; |
|---|
| 433 | | - |
|---|
| 434 | | -struct cpu_map_data { |
|---|
| 435 | | - u16 type; |
|---|
| 436 | | - char data[]; |
|---|
| 437 | | -}; |
|---|
| 438 | | - |
|---|
| 439 | | -struct cpu_map_event { |
|---|
| 440 | | - struct perf_event_header header; |
|---|
| 441 | | - struct cpu_map_data data; |
|---|
| 442 | | -}; |
|---|
| 443 | | - |
|---|
| 444 | | -struct attr_event { |
|---|
| 445 | | - struct perf_event_header header; |
|---|
| 446 | | - struct perf_event_attr attr; |
|---|
| 447 | | - u64 id[]; |
|---|
| 448 | | -}; |
|---|
| 449 | | - |
|---|
| 450 | | -enum { |
|---|
| 451 | | - PERF_EVENT_UPDATE__UNIT = 0, |
|---|
| 452 | | - PERF_EVENT_UPDATE__SCALE = 1, |
|---|
| 453 | | - PERF_EVENT_UPDATE__NAME = 2, |
|---|
| 454 | | - PERF_EVENT_UPDATE__CPUS = 3, |
|---|
| 455 | | -}; |
|---|
| 456 | | - |
|---|
| 457 | | -struct event_update_event_cpus { |
|---|
| 458 | | - struct cpu_map_data cpus; |
|---|
| 459 | | -}; |
|---|
| 460 | | - |
|---|
| 461 | | -struct event_update_event_scale { |
|---|
| 462 | | - double scale; |
|---|
| 463 | | -}; |
|---|
| 464 | | - |
|---|
| 465 | | -struct event_update_event { |
|---|
| 466 | | - struct perf_event_header header; |
|---|
| 467 | | - u64 type; |
|---|
| 468 | | - u64 id; |
|---|
| 469 | | - |
|---|
| 470 | | - char data[]; |
|---|
| 471 | | -}; |
|---|
| 472 | | - |
|---|
| 473 | | -#define MAX_EVENT_NAME 64 |
|---|
| 474 | | - |
|---|
| 475 | | -struct perf_trace_event_type { |
|---|
| 476 | | - u64 event_id; |
|---|
| 477 | | - char name[MAX_EVENT_NAME]; |
|---|
| 478 | | -}; |
|---|
| 479 | | - |
|---|
| 480 | | -struct event_type_event { |
|---|
| 481 | | - struct perf_event_header header; |
|---|
| 482 | | - struct perf_trace_event_type event_type; |
|---|
| 483 | | -}; |
|---|
| 484 | | - |
|---|
| 485 | | -struct tracing_data_event { |
|---|
| 486 | | - struct perf_event_header header; |
|---|
| 487 | | - u32 size; |
|---|
| 488 | | -}; |
|---|
| 489 | | - |
|---|
| 490 | | -struct id_index_entry { |
|---|
| 491 | | - u64 id; |
|---|
| 492 | | - u64 idx; |
|---|
| 493 | | - u64 cpu; |
|---|
| 494 | | - u64 tid; |
|---|
| 495 | | -}; |
|---|
| 496 | | - |
|---|
| 497 | | -struct id_index_event { |
|---|
| 498 | | - struct perf_event_header header; |
|---|
| 499 | | - u64 nr; |
|---|
| 500 | | - struct id_index_entry entries[0]; |
|---|
| 501 | | -}; |
|---|
| 502 | | - |
|---|
| 503 | | -struct auxtrace_info_event { |
|---|
| 504 | | - struct perf_event_header header; |
|---|
| 505 | | - u32 type; |
|---|
| 506 | | - u32 reserved__; /* For alignment */ |
|---|
| 507 | | - u64 priv[]; |
|---|
| 508 | | -}; |
|---|
| 509 | | - |
|---|
| 510 | | -struct auxtrace_event { |
|---|
| 511 | | - struct perf_event_header header; |
|---|
| 512 | | - u64 size; |
|---|
| 513 | | - u64 offset; |
|---|
| 514 | | - u64 reference; |
|---|
| 515 | | - u32 idx; |
|---|
| 516 | | - u32 tid; |
|---|
| 517 | | - u32 cpu; |
|---|
| 518 | | - u32 reserved__; /* For alignment */ |
|---|
| 519 | | -}; |
|---|
| 520 | | - |
|---|
| 521 | | -#define MAX_AUXTRACE_ERROR_MSG 64 |
|---|
| 522 | | - |
|---|
| 523 | | -struct auxtrace_error_event { |
|---|
| 524 | | - struct perf_event_header header; |
|---|
| 525 | | - u32 type; |
|---|
| 526 | | - u32 code; |
|---|
| 527 | | - u32 cpu; |
|---|
| 528 | | - u32 pid; |
|---|
| 529 | | - u32 tid; |
|---|
| 530 | | - u32 reserved__; /* For alignment */ |
|---|
| 531 | | - u64 ip; |
|---|
| 532 | | - char msg[MAX_AUXTRACE_ERROR_MSG]; |
|---|
| 533 | | -}; |
|---|
| 534 | | - |
|---|
| 535 | | -struct aux_event { |
|---|
| 536 | | - struct perf_event_header header; |
|---|
| 537 | | - u64 aux_offset; |
|---|
| 538 | | - u64 aux_size; |
|---|
| 539 | | - u64 flags; |
|---|
| 540 | | -}; |
|---|
| 541 | | - |
|---|
| 542 | | -struct itrace_start_event { |
|---|
| 543 | | - struct perf_event_header header; |
|---|
| 544 | | - u32 pid, tid; |
|---|
| 545 | | -}; |
|---|
| 546 | | - |
|---|
| 547 | | -struct context_switch_event { |
|---|
| 548 | | - struct perf_event_header header; |
|---|
| 549 | | - u32 next_prev_pid; |
|---|
| 550 | | - u32 next_prev_tid; |
|---|
| 551 | | -}; |
|---|
| 552 | | - |
|---|
| 553 | | -struct thread_map_event_entry { |
|---|
| 554 | | - u64 pid; |
|---|
| 555 | | - char comm[16]; |
|---|
| 556 | | -}; |
|---|
| 557 | | - |
|---|
| 558 | | -struct thread_map_event { |
|---|
| 559 | | - struct perf_event_header header; |
|---|
| 560 | | - u64 nr; |
|---|
| 561 | | - struct thread_map_event_entry entries[]; |
|---|
| 562 | | -}; |
|---|
| 563 | | - |
|---|
| 564 | | -enum { |
|---|
| 565 | | - PERF_STAT_CONFIG_TERM__AGGR_MODE = 0, |
|---|
| 566 | | - PERF_STAT_CONFIG_TERM__INTERVAL = 1, |
|---|
| 567 | | - PERF_STAT_CONFIG_TERM__SCALE = 2, |
|---|
| 568 | | - PERF_STAT_CONFIG_TERM__MAX = 3, |
|---|
| 569 | | -}; |
|---|
| 570 | | - |
|---|
| 571 | | -struct stat_config_event_entry { |
|---|
| 572 | | - u64 tag; |
|---|
| 573 | | - u64 val; |
|---|
| 574 | | -}; |
|---|
| 575 | | - |
|---|
| 576 | | -struct stat_config_event { |
|---|
| 577 | | - struct perf_event_header header; |
|---|
| 578 | | - u64 nr; |
|---|
| 579 | | - struct stat_config_event_entry data[]; |
|---|
| 580 | | -}; |
|---|
| 581 | | - |
|---|
| 582 | | -struct stat_event { |
|---|
| 583 | | - struct perf_event_header header; |
|---|
| 584 | | - |
|---|
| 585 | | - u64 id; |
|---|
| 586 | | - u32 cpu; |
|---|
| 587 | | - u32 thread; |
|---|
| 588 | | - |
|---|
| 589 | | - union { |
|---|
| 590 | | - struct { |
|---|
| 591 | | - u64 val; |
|---|
| 592 | | - u64 ena; |
|---|
| 593 | | - u64 run; |
|---|
| 594 | | - }; |
|---|
| 595 | | - u64 values[3]; |
|---|
| 596 | | - }; |
|---|
| 597 | | -}; |
|---|
| 598 | | - |
|---|
| 599 | 283 | enum { |
|---|
| 600 | 284 | PERF_STAT_ROUND_TYPE__INTERVAL = 0, |
|---|
| 601 | 285 | PERF_STAT_ROUND_TYPE__FINAL = 1, |
|---|
| 602 | 286 | }; |
|---|
| 603 | 287 | |
|---|
| 604 | | -struct stat_round_event { |
|---|
| 605 | | - struct perf_event_header header; |
|---|
| 606 | | - u64 type; |
|---|
| 607 | | - u64 time; |
|---|
| 608 | | -}; |
|---|
| 609 | | - |
|---|
| 610 | | -struct time_conv_event { |
|---|
| 611 | | - struct perf_event_header header; |
|---|
| 612 | | - u64 time_shift; |
|---|
| 613 | | - u64 time_mult; |
|---|
| 614 | | - u64 time_zero; |
|---|
| 615 | | -}; |
|---|
| 616 | | - |
|---|
| 617 | | -struct feature_event { |
|---|
| 618 | | - struct perf_event_header header; |
|---|
| 619 | | - u64 feat_id; |
|---|
| 620 | | - char data[]; |
|---|
| 621 | | -}; |
|---|
| 622 | | - |
|---|
| 623 | | -union perf_event { |
|---|
| 624 | | - struct perf_event_header header; |
|---|
| 625 | | - struct mmap_event mmap; |
|---|
| 626 | | - struct mmap2_event mmap2; |
|---|
| 627 | | - struct comm_event comm; |
|---|
| 628 | | - struct namespaces_event namespaces; |
|---|
| 629 | | - struct fork_event fork; |
|---|
| 630 | | - struct lost_event lost; |
|---|
| 631 | | - struct lost_samples_event lost_samples; |
|---|
| 632 | | - struct read_event read; |
|---|
| 633 | | - struct throttle_event throttle; |
|---|
| 634 | | - struct sample_event sample; |
|---|
| 635 | | - struct attr_event attr; |
|---|
| 636 | | - struct event_update_event event_update; |
|---|
| 637 | | - struct event_type_event event_type; |
|---|
| 638 | | - struct tracing_data_event tracing_data; |
|---|
| 639 | | - struct build_id_event build_id; |
|---|
| 640 | | - struct id_index_event id_index; |
|---|
| 641 | | - struct auxtrace_info_event auxtrace_info; |
|---|
| 642 | | - struct auxtrace_event auxtrace; |
|---|
| 643 | | - struct auxtrace_error_event auxtrace_error; |
|---|
| 644 | | - struct aux_event aux; |
|---|
| 645 | | - struct itrace_start_event itrace_start; |
|---|
| 646 | | - struct context_switch_event context_switch; |
|---|
| 647 | | - struct thread_map_event thread_map; |
|---|
| 648 | | - struct cpu_map_event cpu_map; |
|---|
| 649 | | - struct stat_config_event stat_config; |
|---|
| 650 | | - struct stat_event stat; |
|---|
| 651 | | - struct stat_round_event stat_round; |
|---|
| 652 | | - struct time_conv_event time_conv; |
|---|
| 653 | | - struct feature_event feat; |
|---|
| 654 | | -}; |
|---|
| 655 | | - |
|---|
| 656 | 288 | void perf_event__print_totals(void); |
|---|
| 657 | 289 | |
|---|
| 658 | | -struct perf_tool; |
|---|
| 659 | | -struct thread_map; |
|---|
| 660 | | -struct cpu_map; |
|---|
| 290 | +struct perf_cpu_map; |
|---|
| 291 | +struct perf_record_stat_config; |
|---|
| 661 | 292 | struct perf_stat_config; |
|---|
| 662 | | -struct perf_counts_values; |
|---|
| 293 | +struct perf_tool; |
|---|
| 663 | 294 | |
|---|
| 664 | | -typedef int (*perf_event__handler_t)(struct perf_tool *tool, |
|---|
| 665 | | - union perf_event *event, |
|---|
| 666 | | - struct perf_sample *sample, |
|---|
| 667 | | - struct machine *machine); |
|---|
| 668 | | - |
|---|
| 669 | | -int perf_event__synthesize_thread_map(struct perf_tool *tool, |
|---|
| 670 | | - struct thread_map *threads, |
|---|
| 671 | | - perf_event__handler_t process, |
|---|
| 672 | | - struct machine *machine, bool mmap_data, |
|---|
| 673 | | - unsigned int proc_map_timeout); |
|---|
| 674 | | -int perf_event__synthesize_thread_map2(struct perf_tool *tool, |
|---|
| 675 | | - struct thread_map *threads, |
|---|
| 676 | | - perf_event__handler_t process, |
|---|
| 677 | | - struct machine *machine); |
|---|
| 678 | | -int perf_event__synthesize_cpu_map(struct perf_tool *tool, |
|---|
| 679 | | - struct cpu_map *cpus, |
|---|
| 680 | | - perf_event__handler_t process, |
|---|
| 681 | | - struct machine *machine); |
|---|
| 682 | | -int perf_event__synthesize_threads(struct perf_tool *tool, |
|---|
| 683 | | - perf_event__handler_t process, |
|---|
| 684 | | - struct machine *machine, bool mmap_data, |
|---|
| 685 | | - unsigned int proc_map_timeout, |
|---|
| 686 | | - unsigned int nr_threads_synthesize); |
|---|
| 687 | | -int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, |
|---|
| 688 | | - perf_event__handler_t process, |
|---|
| 689 | | - struct machine *machine); |
|---|
| 690 | | -int perf_event__synthesize_stat_config(struct perf_tool *tool, |
|---|
| 691 | | - struct perf_stat_config *config, |
|---|
| 692 | | - perf_event__handler_t process, |
|---|
| 693 | | - struct machine *machine); |
|---|
| 694 | 295 | void perf_event__read_stat_config(struct perf_stat_config *config, |
|---|
| 695 | | - struct stat_config_event *event); |
|---|
| 696 | | -int perf_event__synthesize_stat(struct perf_tool *tool, |
|---|
| 697 | | - u32 cpu, u32 thread, u64 id, |
|---|
| 698 | | - struct perf_counts_values *count, |
|---|
| 699 | | - perf_event__handler_t process, |
|---|
| 700 | | - struct machine *machine); |
|---|
| 701 | | -int perf_event__synthesize_stat_round(struct perf_tool *tool, |
|---|
| 702 | | - u64 time, u64 type, |
|---|
| 703 | | - perf_event__handler_t process, |
|---|
| 704 | | - struct machine *machine); |
|---|
| 705 | | -int perf_event__synthesize_modules(struct perf_tool *tool, |
|---|
| 706 | | - perf_event__handler_t process, |
|---|
| 707 | | - struct machine *machine); |
|---|
| 296 | + struct perf_record_stat_config *event); |
|---|
| 708 | 297 | |
|---|
| 709 | 298 | int perf_event__process_comm(struct perf_tool *tool, |
|---|
| 710 | 299 | union perf_event *event, |
|---|
| .. | .. |
|---|
| 734 | 323 | union perf_event *event, |
|---|
| 735 | 324 | struct perf_sample *sample, |
|---|
| 736 | 325 | struct machine *machine); |
|---|
| 326 | +int perf_event__process_cgroup(struct perf_tool *tool, |
|---|
| 327 | + union perf_event *event, |
|---|
| 328 | + struct perf_sample *sample, |
|---|
| 329 | + struct machine *machine); |
|---|
| 737 | 330 | int perf_event__process_mmap(struct perf_tool *tool, |
|---|
| 738 | 331 | union perf_event *event, |
|---|
| 739 | 332 | struct perf_sample *sample, |
|---|
| .. | .. |
|---|
| 750 | 343 | union perf_event *event, |
|---|
| 751 | 344 | struct perf_sample *sample, |
|---|
| 752 | 345 | struct machine *machine); |
|---|
| 753 | | -int perf_tool__process_synth_event(struct perf_tool *tool, |
|---|
| 754 | | - union perf_event *event, |
|---|
| 755 | | - struct machine *machine, |
|---|
| 756 | | - perf_event__handler_t process); |
|---|
| 346 | +int perf_event__process_ksymbol(struct perf_tool *tool, |
|---|
| 347 | + union perf_event *event, |
|---|
| 348 | + struct perf_sample *sample, |
|---|
| 349 | + struct machine *machine); |
|---|
| 350 | +int perf_event__process_bpf(struct perf_tool *tool, |
|---|
| 351 | + union perf_event *event, |
|---|
| 352 | + struct perf_sample *sample, |
|---|
| 353 | + struct machine *machine); |
|---|
| 354 | +int perf_event__process_text_poke(struct perf_tool *tool, |
|---|
| 355 | + union perf_event *event, |
|---|
| 356 | + struct perf_sample *sample, |
|---|
| 357 | + struct machine *machine); |
|---|
| 757 | 358 | int perf_event__process(struct perf_tool *tool, |
|---|
| 758 | 359 | union perf_event *event, |
|---|
| 759 | 360 | struct perf_sample *sample, |
|---|
| .. | .. |
|---|
| 775 | 376 | |
|---|
| 776 | 377 | const char *perf_event__name(unsigned int id); |
|---|
| 777 | 378 | |
|---|
| 778 | | -size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type, |
|---|
| 779 | | - u64 read_format); |
|---|
| 780 | | -int perf_event__synthesize_sample(union perf_event *event, u64 type, |
|---|
| 781 | | - u64 read_format, |
|---|
| 782 | | - const struct perf_sample *sample); |
|---|
| 783 | | - |
|---|
| 784 | | -pid_t perf_event__synthesize_comm(struct perf_tool *tool, |
|---|
| 785 | | - union perf_event *event, pid_t pid, |
|---|
| 786 | | - perf_event__handler_t process, |
|---|
| 787 | | - struct machine *machine); |
|---|
| 788 | | - |
|---|
| 789 | | -int perf_event__synthesize_namespaces(struct perf_tool *tool, |
|---|
| 790 | | - union perf_event *event, |
|---|
| 791 | | - pid_t pid, pid_t tgid, |
|---|
| 792 | | - perf_event__handler_t process, |
|---|
| 793 | | - struct machine *machine); |
|---|
| 794 | | - |
|---|
| 795 | | -int perf_event__synthesize_mmap_events(struct perf_tool *tool, |
|---|
| 796 | | - union perf_event *event, |
|---|
| 797 | | - pid_t pid, pid_t tgid, |
|---|
| 798 | | - perf_event__handler_t process, |
|---|
| 799 | | - struct machine *machine, |
|---|
| 800 | | - bool mmap_data, |
|---|
| 801 | | - unsigned int proc_map_timeout); |
|---|
| 802 | | - |
|---|
| 803 | | -int perf_event__synthesize_extra_kmaps(struct perf_tool *tool, |
|---|
| 804 | | - perf_event__handler_t process, |
|---|
| 805 | | - struct machine *machine); |
|---|
| 806 | | - |
|---|
| 807 | 379 | size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp); |
|---|
| 808 | 380 | size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp); |
|---|
| 809 | 381 | size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp); |
|---|
| .. | .. |
|---|
| 814 | 386 | size_t perf_event__fprintf_thread_map(union perf_event *event, FILE *fp); |
|---|
| 815 | 387 | size_t perf_event__fprintf_cpu_map(union perf_event *event, FILE *fp); |
|---|
| 816 | 388 | size_t perf_event__fprintf_namespaces(union perf_event *event, FILE *fp); |
|---|
| 817 | | -size_t perf_event__fprintf(union perf_event *event, FILE *fp); |
|---|
| 389 | +size_t perf_event__fprintf_cgroup(union perf_event *event, FILE *fp); |
|---|
| 390 | +size_t perf_event__fprintf_ksymbol(union perf_event *event, FILE *fp); |
|---|
| 391 | +size_t perf_event__fprintf_bpf(union perf_event *event, FILE *fp); |
|---|
| 392 | +size_t perf_event__fprintf_text_poke(union perf_event *event, struct machine *machine,FILE *fp); |
|---|
| 393 | +size_t perf_event__fprintf(union perf_event *event, struct machine *machine, FILE *fp); |
|---|
| 818 | 394 | |
|---|
| 819 | 395 | int kallsyms__get_function_start(const char *kallsyms_filename, |
|---|
| 820 | 396 | const char *symbol_name, u64 *addr); |
|---|
| 821 | 397 | |
|---|
| 822 | | -void *cpu_map_data__alloc(struct cpu_map *map, size_t *size, u16 *type, int *max); |
|---|
| 823 | | -void cpu_map_data__synthesize(struct cpu_map_data *data, struct cpu_map *map, |
|---|
| 398 | +void *cpu_map_data__alloc(struct perf_cpu_map *map, size_t *size, u16 *type, int *max); |
|---|
| 399 | +void cpu_map_data__synthesize(struct perf_record_cpu_map_data *data, struct perf_cpu_map *map, |
|---|
| 824 | 400 | u16 type, int max); |
|---|
| 825 | 401 | |
|---|
| 826 | 402 | void event_attr_init(struct perf_event_attr *attr); |
|---|
| 827 | 403 | |
|---|
| 828 | 404 | int perf_event_paranoid(void); |
|---|
| 405 | +bool perf_event_paranoid_check(int max_level); |
|---|
| 829 | 406 | |
|---|
| 830 | 407 | extern int sysctl_perf_event_max_stack; |
|---|
| 831 | 408 | extern int sysctl_perf_event_max_contexts_per_stack; |
|---|
| 409 | +extern unsigned int proc_map_timeout; |
|---|
| 832 | 410 | |
|---|
| 833 | 411 | #endif /* __PERF_RECORD_H */ |
|---|