Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.15-rc5 285 lines 6.7 kB view raw
1#ifndef __PERF_RECORD_H 2#define __PERF_RECORD_H 3 4#include <limits.h> 5#include <stdio.h> 6 7#include "../perf.h" 8#include "map.h" 9#include "build-id.h" 10 11struct mmap_event { 12 struct perf_event_header header; 13 u32 pid, tid; 14 u64 start; 15 u64 len; 16 u64 pgoff; 17 char filename[PATH_MAX]; 18}; 19 20struct mmap2_event { 21 struct perf_event_header header; 22 u32 pid, tid; 23 u64 start; 24 u64 len; 25 u64 pgoff; 26 u32 maj; 27 u32 min; 28 u64 ino; 29 u64 ino_generation; 30 char filename[PATH_MAX]; 31}; 32 33struct comm_event { 34 struct perf_event_header header; 35 u32 pid, tid; 36 char comm[16]; 37}; 38 39struct fork_event { 40 struct perf_event_header header; 41 u32 pid, ppid; 42 u32 tid, ptid; 43 u64 time; 44}; 45 46struct lost_event { 47 struct perf_event_header header; 48 u64 id; 49 u64 lost; 50}; 51 52/* 53 * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID 54 */ 55struct read_event { 56 struct perf_event_header header; 57 u32 pid, tid; 58 u64 value; 59 u64 time_enabled; 60 u64 time_running; 61 u64 id; 62}; 63 64struct throttle_event { 65 struct perf_event_header header; 66 u64 time; 67 u64 id; 68 u64 stream_id; 69}; 70 71#define PERF_SAMPLE_MASK \ 72 (PERF_SAMPLE_IP | PERF_SAMPLE_TID | \ 73 PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR | \ 74 PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID | \ 75 PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD | \ 76 PERF_SAMPLE_IDENTIFIER) 77 78/* perf sample has 16 bits size limit */ 79#define PERF_SAMPLE_MAX_SIZE (1 << 16) 80 81struct sample_event { 82 struct perf_event_header header; 83 u64 array[]; 84}; 85 86struct regs_dump { 87 u64 abi; 88 u64 mask; 89 u64 *regs; 90}; 91 92struct stack_dump { 93 u16 offset; 94 u64 size; 95 char *data; 96}; 97 98struct sample_read_value { 99 u64 value; 100 u64 id; 101}; 102 103struct sample_read { 104 u64 time_enabled; 105 u64 time_running; 106 union { 107 struct { 108 u64 nr; 109 struct sample_read_value *values; 110 } group; 111 struct sample_read_value one; 112 }; 113}; 114 115struct perf_sample { 116 u64 ip; 117 u32 pid, tid; 118 u64 time; 119 u64 addr; 120 u64 id; 121 u64 stream_id; 122 u64 period; 123 u64 weight; 124 u64 transaction; 125 u32 cpu; 126 u32 raw_size; 127 u64 data_src; 128 void *raw_data; 129 struct ip_callchain *callchain; 130 struct branch_stack *branch_stack; 131 struct regs_dump user_regs; 132 struct stack_dump user_stack; 133 struct sample_read read; 134}; 135 136#define PERF_MEM_DATA_SRC_NONE \ 137 (PERF_MEM_S(OP, NA) |\ 138 PERF_MEM_S(LVL, NA) |\ 139 PERF_MEM_S(SNOOP, NA) |\ 140 PERF_MEM_S(LOCK, NA) |\ 141 PERF_MEM_S(TLB, NA)) 142 143struct build_id_event { 144 struct perf_event_header header; 145 pid_t pid; 146 u8 build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))]; 147 char filename[]; 148}; 149 150enum perf_user_event_type { /* above any possible kernel type */ 151 PERF_RECORD_USER_TYPE_START = 64, 152 PERF_RECORD_HEADER_ATTR = 64, 153 PERF_RECORD_HEADER_EVENT_TYPE = 65, /* depreceated */ 154 PERF_RECORD_HEADER_TRACING_DATA = 66, 155 PERF_RECORD_HEADER_BUILD_ID = 67, 156 PERF_RECORD_FINISHED_ROUND = 68, 157 PERF_RECORD_HEADER_MAX 158}; 159 160struct attr_event { 161 struct perf_event_header header; 162 struct perf_event_attr attr; 163 u64 id[]; 164}; 165 166#define MAX_EVENT_NAME 64 167 168struct perf_trace_event_type { 169 u64 event_id; 170 char name[MAX_EVENT_NAME]; 171}; 172 173struct event_type_event { 174 struct perf_event_header header; 175 struct perf_trace_event_type event_type; 176}; 177 178struct tracing_data_event { 179 struct perf_event_header header; 180 u32 size; 181}; 182 183union perf_event { 184 struct perf_event_header header; 185 struct mmap_event mmap; 186 struct mmap2_event mmap2; 187 struct comm_event comm; 188 struct fork_event fork; 189 struct lost_event lost; 190 struct read_event read; 191 struct throttle_event throttle; 192 struct sample_event sample; 193 struct attr_event attr; 194 struct event_type_event event_type; 195 struct tracing_data_event tracing_data; 196 struct build_id_event build_id; 197}; 198 199void perf_event__print_totals(void); 200 201struct perf_tool; 202struct thread_map; 203 204typedef int (*perf_event__handler_t)(struct perf_tool *tool, 205 union perf_event *event, 206 struct perf_sample *sample, 207 struct machine *machine); 208 209int perf_event__synthesize_thread_map(struct perf_tool *tool, 210 struct thread_map *threads, 211 perf_event__handler_t process, 212 struct machine *machine, bool mmap_data); 213int perf_event__synthesize_threads(struct perf_tool *tool, 214 perf_event__handler_t process, 215 struct machine *machine, bool mmap_data); 216int perf_event__synthesize_kernel_mmap(struct perf_tool *tool, 217 perf_event__handler_t process, 218 struct machine *machine); 219 220int perf_event__synthesize_modules(struct perf_tool *tool, 221 perf_event__handler_t process, 222 struct machine *machine); 223 224int perf_event__process_comm(struct perf_tool *tool, 225 union perf_event *event, 226 struct perf_sample *sample, 227 struct machine *machine); 228int perf_event__process_lost(struct perf_tool *tool, 229 union perf_event *event, 230 struct perf_sample *sample, 231 struct machine *machine); 232int perf_event__process_mmap(struct perf_tool *tool, 233 union perf_event *event, 234 struct perf_sample *sample, 235 struct machine *machine); 236int perf_event__process_mmap2(struct perf_tool *tool, 237 union perf_event *event, 238 struct perf_sample *sample, 239 struct machine *machine); 240int perf_event__process_fork(struct perf_tool *tool, 241 union perf_event *event, 242 struct perf_sample *sample, 243 struct machine *machine); 244int perf_event__process_exit(struct perf_tool *tool, 245 union perf_event *event, 246 struct perf_sample *sample, 247 struct machine *machine); 248int perf_event__process(struct perf_tool *tool, 249 union perf_event *event, 250 struct perf_sample *sample, 251 struct machine *machine); 252 253struct addr_location; 254 255int perf_event__preprocess_sample(const union perf_event *event, 256 struct machine *machine, 257 struct addr_location *al, 258 struct perf_sample *sample); 259 260const char *perf_event__name(unsigned int id); 261 262size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type, 263 u64 read_format); 264int perf_event__synthesize_sample(union perf_event *event, u64 type, 265 u64 read_format, 266 const struct perf_sample *sample, 267 bool swapped); 268 269int perf_event__synthesize_mmap_events(struct perf_tool *tool, 270 union perf_event *event, 271 pid_t pid, pid_t tgid, 272 perf_event__handler_t process, 273 struct machine *machine, 274 bool mmap_data); 275 276size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp); 277size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp); 278size_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp); 279size_t perf_event__fprintf_task(union perf_event *event, FILE *fp); 280size_t perf_event__fprintf(union perf_event *event, FILE *fp); 281 282u64 kallsyms__get_function_start(const char *kallsyms_filename, 283 const char *symbol_name); 284 285#endif /* __PERF_RECORD_H */