]> git.karo-electronics.de Git - karo-tx-linux.git/blob - tools/perf/util/event.h
jfs: fix error path in ialloc
[karo-tx-linux.git] / tools / perf / util / event.h
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
11 struct 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
20 struct comm_event {
21         struct perf_event_header header;
22         u32 pid, tid;
23         char comm[16];
24 };
25
26 struct fork_event {
27         struct perf_event_header header;
28         u32 pid, ppid;
29         u32 tid, ptid;
30         u64 time;
31 };
32
33 struct lost_event {
34         struct perf_event_header header;
35         u64 id;
36         u64 lost;
37 };
38
39 /*
40  * PERF_FORMAT_ENABLED | PERF_FORMAT_RUNNING | PERF_FORMAT_ID
41  */
42 struct read_event {
43         struct perf_event_header header;
44         u32 pid, tid;
45         u64 value;
46         u64 time_enabled;
47         u64 time_running;
48         u64 id;
49 };
50
51
52 #define PERF_SAMPLE_MASK                                \
53         (PERF_SAMPLE_IP | PERF_SAMPLE_TID |             \
54          PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR |          \
55         PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID |        \
56          PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD |         \
57          PERF_SAMPLE_IDENTIFIER)
58
59 struct sample_event {
60         struct perf_event_header        header;
61         u64 array[];
62 };
63
64 struct regs_dump {
65         u64 abi;
66         u64 *regs;
67 };
68
69 struct stack_dump {
70         u16 offset;
71         u64 size;
72         char *data;
73 };
74
75 struct sample_read_value {
76         u64 value;
77         u64 id;
78 };
79
80 struct sample_read {
81         u64 time_enabled;
82         u64 time_running;
83         union {
84                 struct {
85                         u64 nr;
86                         struct sample_read_value *values;
87                 } group;
88                 struct sample_read_value one;
89         };
90 };
91
92 struct perf_sample {
93         u64 ip;
94         u32 pid, tid;
95         u64 time;
96         u64 addr;
97         u64 id;
98         u64 stream_id;
99         u64 period;
100         u64 weight;
101         u32 cpu;
102         u32 raw_size;
103         u64 data_src;
104         void *raw_data;
105         struct ip_callchain *callchain;
106         struct branch_stack *branch_stack;
107         struct regs_dump  user_regs;
108         struct stack_dump user_stack;
109         struct sample_read read;
110 };
111
112 #define PERF_MEM_DATA_SRC_NONE \
113         (PERF_MEM_S(OP, NA) |\
114          PERF_MEM_S(LVL, NA) |\
115          PERF_MEM_S(SNOOP, NA) |\
116          PERF_MEM_S(LOCK, NA) |\
117          PERF_MEM_S(TLB, NA))
118
119 struct build_id_event {
120         struct perf_event_header header;
121         pid_t                    pid;
122         u8                       build_id[PERF_ALIGN(BUILD_ID_SIZE, sizeof(u64))];
123         char                     filename[];
124 };
125
126 enum perf_user_event_type { /* above any possible kernel type */
127         PERF_RECORD_USER_TYPE_START             = 64,
128         PERF_RECORD_HEADER_ATTR                 = 64,
129         PERF_RECORD_HEADER_EVENT_TYPE           = 65, /* depreceated */
130         PERF_RECORD_HEADER_TRACING_DATA         = 66,
131         PERF_RECORD_HEADER_BUILD_ID             = 67,
132         PERF_RECORD_FINISHED_ROUND              = 68,
133         PERF_RECORD_HEADER_MAX
134 };
135
136 struct attr_event {
137         struct perf_event_header header;
138         struct perf_event_attr attr;
139         u64 id[];
140 };
141
142 #define MAX_EVENT_NAME 64
143
144 struct perf_trace_event_type {
145         u64     event_id;
146         char    name[MAX_EVENT_NAME];
147 };
148
149 struct event_type_event {
150         struct perf_event_header header;
151         struct perf_trace_event_type event_type;
152 };
153
154 struct tracing_data_event {
155         struct perf_event_header header;
156         u32 size;
157 };
158
159 union perf_event {
160         struct perf_event_header        header;
161         struct mmap_event               mmap;
162         struct comm_event               comm;
163         struct fork_event               fork;
164         struct lost_event               lost;
165         struct read_event               read;
166         struct sample_event             sample;
167         struct attr_event               attr;
168         struct event_type_event         event_type;
169         struct tracing_data_event       tracing_data;
170         struct build_id_event           build_id;
171 };
172
173 void perf_event__print_totals(void);
174
175 struct perf_tool;
176 struct thread_map;
177
178 typedef int (*perf_event__handler_t)(struct perf_tool *tool,
179                                      union perf_event *event,
180                                      struct perf_sample *sample,
181                                      struct machine *machine);
182
183 int perf_event__synthesize_thread_map(struct perf_tool *tool,
184                                       struct thread_map *threads,
185                                       perf_event__handler_t process,
186                                       struct machine *machine);
187 int perf_event__synthesize_threads(struct perf_tool *tool,
188                                    perf_event__handler_t process,
189                                    struct machine *machine);
190 int perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
191                                        perf_event__handler_t process,
192                                        struct machine *machine,
193                                        const char *symbol_name);
194
195 int perf_event__synthesize_modules(struct perf_tool *tool,
196                                    perf_event__handler_t process,
197                                    struct machine *machine);
198
199 int perf_event__process_comm(struct perf_tool *tool,
200                              union perf_event *event,
201                              struct perf_sample *sample,
202                              struct machine *machine);
203 int perf_event__process_lost(struct perf_tool *tool,
204                              union perf_event *event,
205                              struct perf_sample *sample,
206                              struct machine *machine);
207 int perf_event__process_mmap(struct perf_tool *tool,
208                              union perf_event *event,
209                              struct perf_sample *sample,
210                              struct machine *machine);
211 int perf_event__process_fork(struct perf_tool *tool,
212                              union perf_event *event,
213                              struct perf_sample *sample,
214                              struct machine *machine);
215 int perf_event__process_exit(struct perf_tool *tool,
216                              union perf_event *event,
217                              struct perf_sample *sample,
218                              struct machine *machine);
219 int perf_event__process(struct perf_tool *tool,
220                         union perf_event *event,
221                         struct perf_sample *sample,
222                         struct machine *machine);
223
224 struct addr_location;
225 int perf_event__preprocess_sample(const union perf_event *self,
226                                   struct machine *machine,
227                                   struct addr_location *al,
228                                   struct perf_sample *sample);
229
230 const char *perf_event__name(unsigned int id);
231
232 size_t perf_event__sample_event_size(const struct perf_sample *sample, u64 type,
233                                      u64 sample_regs_user, u64 read_format);
234 int perf_event__synthesize_sample(union perf_event *event, u64 type,
235                                   u64 sample_regs_user, u64 read_format,
236                                   const struct perf_sample *sample,
237                                   bool swapped);
238
239 size_t perf_event__fprintf_comm(union perf_event *event, FILE *fp);
240 size_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp);
241 size_t perf_event__fprintf_task(union perf_event *event, FILE *fp);
242 size_t perf_event__fprintf(union perf_event *event, FILE *fp);
243
244 #endif /* __PERF_RECORD_H */