diff options
Diffstat (limited to 'include/uapi/linux/perf_event.h')
| -rw-r--r-- | include/uapi/linux/perf_event.h | 115 |
1 files changed, 98 insertions, 17 deletions
diff --git a/include/uapi/linux/perf_event.h b/include/uapi/linux/perf_event.h index 9b79abbd1ab8..309211b3eb67 100644 --- a/include/uapi/linux/perf_event.h +++ b/include/uapi/linux/perf_event.h | |||
| @@ -152,21 +152,42 @@ enum perf_event_sample_format { | |||
| 152 | * The branch types can be combined, however BRANCH_ANY covers all types | 152 | * The branch types can be combined, however BRANCH_ANY covers all types |
| 153 | * of branches and therefore it supersedes all the other types. | 153 | * of branches and therefore it supersedes all the other types. |
| 154 | */ | 154 | */ |
| 155 | enum perf_branch_sample_type_shift { | ||
| 156 | PERF_SAMPLE_BRANCH_USER_SHIFT = 0, /* user branches */ | ||
| 157 | PERF_SAMPLE_BRANCH_KERNEL_SHIFT = 1, /* kernel branches */ | ||
| 158 | PERF_SAMPLE_BRANCH_HV_SHIFT = 2, /* hypervisor branches */ | ||
| 159 | |||
| 160 | PERF_SAMPLE_BRANCH_ANY_SHIFT = 3, /* any branch types */ | ||
| 161 | PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT = 4, /* any call branch */ | ||
| 162 | PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT = 5, /* any return branch */ | ||
| 163 | PERF_SAMPLE_BRANCH_IND_CALL_SHIFT = 6, /* indirect calls */ | ||
| 164 | PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT = 7, /* transaction aborts */ | ||
| 165 | PERF_SAMPLE_BRANCH_IN_TX_SHIFT = 8, /* in transaction */ | ||
| 166 | PERF_SAMPLE_BRANCH_NO_TX_SHIFT = 9, /* not in transaction */ | ||
| 167 | PERF_SAMPLE_BRANCH_COND_SHIFT = 10, /* conditional branches */ | ||
| 168 | |||
| 169 | PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT = 11, /* call/ret stack */ | ||
| 170 | |||
| 171 | PERF_SAMPLE_BRANCH_MAX_SHIFT /* non-ABI */ | ||
| 172 | }; | ||
| 173 | |||
| 155 | enum perf_branch_sample_type { | 174 | enum perf_branch_sample_type { |
| 156 | PERF_SAMPLE_BRANCH_USER = 1U << 0, /* user branches */ | 175 | PERF_SAMPLE_BRANCH_USER = 1U << PERF_SAMPLE_BRANCH_USER_SHIFT, |
| 157 | PERF_SAMPLE_BRANCH_KERNEL = 1U << 1, /* kernel branches */ | 176 | PERF_SAMPLE_BRANCH_KERNEL = 1U << PERF_SAMPLE_BRANCH_KERNEL_SHIFT, |
| 158 | PERF_SAMPLE_BRANCH_HV = 1U << 2, /* hypervisor branches */ | 177 | PERF_SAMPLE_BRANCH_HV = 1U << PERF_SAMPLE_BRANCH_HV_SHIFT, |
| 159 | 178 | ||
| 160 | PERF_SAMPLE_BRANCH_ANY = 1U << 3, /* any branch types */ | 179 | PERF_SAMPLE_BRANCH_ANY = 1U << PERF_SAMPLE_BRANCH_ANY_SHIFT, |
| 161 | PERF_SAMPLE_BRANCH_ANY_CALL = 1U << 4, /* any call branch */ | 180 | PERF_SAMPLE_BRANCH_ANY_CALL = 1U << PERF_SAMPLE_BRANCH_ANY_CALL_SHIFT, |
| 162 | PERF_SAMPLE_BRANCH_ANY_RETURN = 1U << 5, /* any return branch */ | 181 | PERF_SAMPLE_BRANCH_ANY_RETURN = 1U << PERF_SAMPLE_BRANCH_ANY_RETURN_SHIFT, |
| 163 | PERF_SAMPLE_BRANCH_IND_CALL = 1U << 6, /* indirect calls */ | 182 | PERF_SAMPLE_BRANCH_IND_CALL = 1U << PERF_SAMPLE_BRANCH_IND_CALL_SHIFT, |
| 164 | PERF_SAMPLE_BRANCH_ABORT_TX = 1U << 7, /* transaction aborts */ | 183 | PERF_SAMPLE_BRANCH_ABORT_TX = 1U << PERF_SAMPLE_BRANCH_ABORT_TX_SHIFT, |
| 165 | PERF_SAMPLE_BRANCH_IN_TX = 1U << 8, /* in transaction */ | 184 | PERF_SAMPLE_BRANCH_IN_TX = 1U << PERF_SAMPLE_BRANCH_IN_TX_SHIFT, |
| 166 | PERF_SAMPLE_BRANCH_NO_TX = 1U << 9, /* not in transaction */ | 185 | PERF_SAMPLE_BRANCH_NO_TX = 1U << PERF_SAMPLE_BRANCH_NO_TX_SHIFT, |
| 167 | PERF_SAMPLE_BRANCH_COND = 1U << 10, /* conditional branches */ | 186 | PERF_SAMPLE_BRANCH_COND = 1U << PERF_SAMPLE_BRANCH_COND_SHIFT, |
| 168 | 187 | ||
| 169 | PERF_SAMPLE_BRANCH_MAX = 1U << 11, /* non-ABI */ | 188 | PERF_SAMPLE_BRANCH_CALL_STACK = 1U << PERF_SAMPLE_BRANCH_CALL_STACK_SHIFT, |
| 189 | |||
| 190 | PERF_SAMPLE_BRANCH_MAX = 1U << PERF_SAMPLE_BRANCH_MAX_SHIFT, | ||
| 170 | }; | 191 | }; |
| 171 | 192 | ||
| 172 | #define PERF_SAMPLE_BRANCH_PLM_ALL \ | 193 | #define PERF_SAMPLE_BRANCH_PLM_ALL \ |
| @@ -240,6 +261,7 @@ enum perf_event_read_format { | |||
| 240 | #define PERF_ATTR_SIZE_VER3 96 /* add: sample_regs_user */ | 261 | #define PERF_ATTR_SIZE_VER3 96 /* add: sample_regs_user */ |
| 241 | /* add: sample_stack_user */ | 262 | /* add: sample_stack_user */ |
| 242 | #define PERF_ATTR_SIZE_VER4 104 /* add: sample_regs_intr */ | 263 | #define PERF_ATTR_SIZE_VER4 104 /* add: sample_regs_intr */ |
| 264 | #define PERF_ATTR_SIZE_VER5 112 /* add: aux_watermark */ | ||
| 243 | 265 | ||
| 244 | /* | 266 | /* |
| 245 | * Hardware event_id to monitor via a performance monitoring event: | 267 | * Hardware event_id to monitor via a performance monitoring event: |
| @@ -305,7 +327,8 @@ struct perf_event_attr { | |||
| 305 | exclude_callchain_user : 1, /* exclude user callchains */ | 327 | exclude_callchain_user : 1, /* exclude user callchains */ |
| 306 | mmap2 : 1, /* include mmap with inode data */ | 328 | mmap2 : 1, /* include mmap with inode data */ |
| 307 | comm_exec : 1, /* flag comm events that are due to an exec */ | 329 | comm_exec : 1, /* flag comm events that are due to an exec */ |
| 308 | __reserved_1 : 39; | 330 | use_clockid : 1, /* use @clockid for time fields */ |
| 331 | __reserved_1 : 38; | ||
| 309 | 332 | ||
| 310 | union { | 333 | union { |
| 311 | __u32 wakeup_events; /* wakeup every n events */ | 334 | __u32 wakeup_events; /* wakeup every n events */ |
| @@ -334,8 +357,7 @@ struct perf_event_attr { | |||
| 334 | */ | 357 | */ |
| 335 | __u32 sample_stack_user; | 358 | __u32 sample_stack_user; |
| 336 | 359 | ||
| 337 | /* Align to u64. */ | 360 | __s32 clockid; |
| 338 | __u32 __reserved_2; | ||
| 339 | /* | 361 | /* |
| 340 | * Defines set of regs to dump for each sample | 362 | * Defines set of regs to dump for each sample |
| 341 | * state captured on: | 363 | * state captured on: |
| @@ -345,6 +367,12 @@ struct perf_event_attr { | |||
| 345 | * See asm/perf_regs.h for details. | 367 | * See asm/perf_regs.h for details. |
| 346 | */ | 368 | */ |
| 347 | __u64 sample_regs_intr; | 369 | __u64 sample_regs_intr; |
| 370 | |||
| 371 | /* | ||
| 372 | * Wakeup watermark for AUX area | ||
| 373 | */ | ||
| 374 | __u32 aux_watermark; | ||
| 375 | __u32 __reserved_2; /* align to __u64 */ | ||
| 348 | }; | 376 | }; |
| 349 | 377 | ||
| 350 | #define perf_flags(attr) (*(&(attr)->read_format + 1)) | 378 | #define perf_flags(attr) (*(&(attr)->read_format + 1)) |
| @@ -360,6 +388,7 @@ struct perf_event_attr { | |||
| 360 | #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) | 388 | #define PERF_EVENT_IOC_SET_OUTPUT _IO ('$', 5) |
| 361 | #define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *) | 389 | #define PERF_EVENT_IOC_SET_FILTER _IOW('$', 6, char *) |
| 362 | #define PERF_EVENT_IOC_ID _IOR('$', 7, __u64 *) | 390 | #define PERF_EVENT_IOC_ID _IOR('$', 7, __u64 *) |
| 391 | #define PERF_EVENT_IOC_SET_BPF _IOW('$', 8, __u32) | ||
| 363 | 392 | ||
| 364 | enum perf_event_ioc_flags { | 393 | enum perf_event_ioc_flags { |
| 365 | PERF_IOC_FLAG_GROUP = 1U << 0, | 394 | PERF_IOC_FLAG_GROUP = 1U << 0, |
| @@ -500,9 +529,30 @@ struct perf_event_mmap_page { | |||
| 500 | * In this case the kernel will not over-write unread data. | 529 | * In this case the kernel will not over-write unread data. |
| 501 | * | 530 | * |
| 502 | * See perf_output_put_handle() for the data ordering. | 531 | * See perf_output_put_handle() for the data ordering. |
| 532 | * | ||
| 533 | * data_{offset,size} indicate the location and size of the perf record | ||
| 534 | * buffer within the mmapped area. | ||
| 503 | */ | 535 | */ |
| 504 | __u64 data_head; /* head in the data section */ | 536 | __u64 data_head; /* head in the data section */ |
| 505 | __u64 data_tail; /* user-space written tail */ | 537 | __u64 data_tail; /* user-space written tail */ |
| 538 | __u64 data_offset; /* where the buffer starts */ | ||
| 539 | __u64 data_size; /* data buffer size */ | ||
| 540 | |||
| 541 | /* | ||
| 542 | * AUX area is defined by aux_{offset,size} fields that should be set | ||
| 543 | * by the userspace, so that | ||
| 544 | * | ||
| 545 | * aux_offset >= data_offset + data_size | ||
| 546 | * | ||
| 547 | * prior to mmap()ing it. Size of the mmap()ed area should be aux_size. | ||
| 548 | * | ||
| 549 | * Ring buffer pointers aux_{head,tail} have the same semantics as | ||
| 550 | * data_{head,tail} and same ordering rules apply. | ||
| 551 | */ | ||
| 552 | __u64 aux_head; | ||
| 553 | __u64 aux_tail; | ||
| 554 | __u64 aux_offset; | ||
| 555 | __u64 aux_size; | ||
| 506 | }; | 556 | }; |
| 507 | 557 | ||
| 508 | #define PERF_RECORD_MISC_CPUMODE_MASK (7 << 0) | 558 | #define PERF_RECORD_MISC_CPUMODE_MASK (7 << 0) |
| @@ -725,6 +775,31 @@ enum perf_event_type { | |||
| 725 | */ | 775 | */ |
| 726 | PERF_RECORD_MMAP2 = 10, | 776 | PERF_RECORD_MMAP2 = 10, |
| 727 | 777 | ||
| 778 | /* | ||
| 779 | * Records that new data landed in the AUX buffer part. | ||
| 780 | * | ||
| 781 | * struct { | ||
| 782 | * struct perf_event_header header; | ||
| 783 | * | ||
| 784 | * u64 aux_offset; | ||
| 785 | * u64 aux_size; | ||
| 786 | * u64 flags; | ||
| 787 | * struct sample_id sample_id; | ||
| 788 | * }; | ||
| 789 | */ | ||
| 790 | PERF_RECORD_AUX = 11, | ||
| 791 | |||
| 792 | /* | ||
| 793 | * Indicates that instruction trace has started | ||
| 794 | * | ||
| 795 | * struct { | ||
| 796 | * struct perf_event_header header; | ||
| 797 | * u32 pid; | ||
| 798 | * u32 tid; | ||
| 799 | * }; | ||
| 800 | */ | ||
| 801 | PERF_RECORD_ITRACE_START = 12, | ||
| 802 | |||
| 728 | PERF_RECORD_MAX, /* non-ABI */ | 803 | PERF_RECORD_MAX, /* non-ABI */ |
| 729 | }; | 804 | }; |
| 730 | 805 | ||
| @@ -742,6 +817,12 @@ enum perf_callchain_context { | |||
| 742 | PERF_CONTEXT_MAX = (__u64)-4095, | 817 | PERF_CONTEXT_MAX = (__u64)-4095, |
| 743 | }; | 818 | }; |
| 744 | 819 | ||
| 820 | /** | ||
| 821 | * PERF_RECORD_AUX::flags bits | ||
| 822 | */ | ||
| 823 | #define PERF_AUX_FLAG_TRUNCATED 0x01 /* record was truncated to fit */ | ||
| 824 | #define PERF_AUX_FLAG_OVERWRITE 0x02 /* snapshot from overwrite mode */ | ||
| 825 | |||
| 745 | #define PERF_FLAG_FD_NO_GROUP (1UL << 0) | 826 | #define PERF_FLAG_FD_NO_GROUP (1UL << 0) |
| 746 | #define PERF_FLAG_FD_OUTPUT (1UL << 1) | 827 | #define PERF_FLAG_FD_OUTPUT (1UL << 1) |
| 747 | #define PERF_FLAG_PID_CGROUP (1UL << 2) /* pid=cgroup id, per-cpu mode only */ | 828 | #define PERF_FLAG_PID_CGROUP (1UL << 2) /* pid=cgroup id, per-cpu mode only */ |
