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.0-rc1 302 lines 6.4 kB view raw
1#ifndef __PERF_TRACE_EVENTS_H 2#define __PERF_TRACE_EVENTS_H 3 4#include <stdbool.h> 5#include "parse-events.h" 6#include "session.h" 7 8#define __unused __attribute__((unused)) 9 10 11#ifndef PAGE_MASK 12#define PAGE_MASK (page_size - 1) 13#endif 14 15enum { 16 RINGBUF_TYPE_PADDING = 29, 17 RINGBUF_TYPE_TIME_EXTEND = 30, 18 RINGBUF_TYPE_TIME_STAMP = 31, 19}; 20 21#ifndef TS_SHIFT 22#define TS_SHIFT 27 23#endif 24 25#define NSECS_PER_SEC 1000000000ULL 26#define NSECS_PER_USEC 1000ULL 27 28enum format_flags { 29 FIELD_IS_ARRAY = 1, 30 FIELD_IS_POINTER = 2, 31 FIELD_IS_SIGNED = 4, 32 FIELD_IS_STRING = 8, 33 FIELD_IS_DYNAMIC = 16, 34 FIELD_IS_FLAG = 32, 35 FIELD_IS_SYMBOLIC = 64, 36}; 37 38struct format_field { 39 struct format_field *next; 40 char *type; 41 char *name; 42 int offset; 43 int size; 44 unsigned long flags; 45}; 46 47struct format { 48 int nr_common; 49 int nr_fields; 50 struct format_field *common_fields; 51 struct format_field *fields; 52}; 53 54struct print_arg_atom { 55 char *atom; 56}; 57 58struct print_arg_string { 59 char *string; 60 int offset; 61}; 62 63struct print_arg_field { 64 char *name; 65 struct format_field *field; 66}; 67 68struct print_flag_sym { 69 struct print_flag_sym *next; 70 char *value; 71 char *str; 72}; 73 74struct print_arg_typecast { 75 char *type; 76 struct print_arg *item; 77}; 78 79struct print_arg_flags { 80 struct print_arg *field; 81 char *delim; 82 struct print_flag_sym *flags; 83}; 84 85struct print_arg_symbol { 86 struct print_arg *field; 87 struct print_flag_sym *symbols; 88}; 89 90struct print_arg; 91 92struct print_arg_op { 93 char *op; 94 int prio; 95 struct print_arg *left; 96 struct print_arg *right; 97}; 98 99struct print_arg_func { 100 char *name; 101 struct print_arg *args; 102}; 103 104enum print_arg_type { 105 PRINT_NULL, 106 PRINT_ATOM, 107 PRINT_FIELD, 108 PRINT_FLAGS, 109 PRINT_SYMBOL, 110 PRINT_TYPE, 111 PRINT_STRING, 112 PRINT_OP, 113}; 114 115struct print_arg { 116 struct print_arg *next; 117 enum print_arg_type type; 118 union { 119 struct print_arg_atom atom; 120 struct print_arg_field field; 121 struct print_arg_typecast typecast; 122 struct print_arg_flags flags; 123 struct print_arg_symbol symbol; 124 struct print_arg_func func; 125 struct print_arg_string string; 126 struct print_arg_op op; 127 }; 128}; 129 130struct print_fmt { 131 char *format; 132 struct print_arg *args; 133}; 134 135struct event { 136 struct event *next; 137 char *name; 138 int id; 139 int flags; 140 struct format format; 141 struct print_fmt print_fmt; 142 char *system; 143}; 144 145enum { 146 EVENT_FL_ISFTRACE = 0x01, 147 EVENT_FL_ISPRINT = 0x02, 148 EVENT_FL_ISBPRINT = 0x04, 149 EVENT_FL_ISFUNC = 0x08, 150 EVENT_FL_ISFUNCENT = 0x10, 151 EVENT_FL_ISFUNCRET = 0x20, 152 153 EVENT_FL_FAILED = 0x80000000 154}; 155 156struct record { 157 unsigned long long ts; 158 int size; 159 void *data; 160}; 161 162struct record *trace_peek_data(int cpu); 163struct record *trace_read_data(int cpu); 164 165void parse_set_info(int nr_cpus, int long_sz); 166 167ssize_t trace_report(int fd, bool repipe); 168 169void *malloc_or_die(unsigned int size); 170 171void parse_cmdlines(char *file, int size); 172void parse_proc_kallsyms(char *file, unsigned int size); 173void parse_ftrace_printk(char *file, unsigned int size); 174 175void print_funcs(void); 176void print_printk(void); 177 178int parse_ftrace_file(char *buf, unsigned long size); 179int parse_event_file(char *buf, unsigned long size, char *sys); 180void print_trace_event(int cpu, void *data, int size); 181 182extern int file_bigendian; 183extern int host_bigendian; 184 185int bigendian(void); 186 187static inline unsigned short __data2host2(unsigned short data) 188{ 189 unsigned short swap; 190 191 if (host_bigendian == file_bigendian) 192 return data; 193 194 swap = ((data & 0xffULL) << 8) | 195 ((data & (0xffULL << 8)) >> 8); 196 197 return swap; 198} 199 200static inline unsigned int __data2host4(unsigned int data) 201{ 202 unsigned int swap; 203 204 if (host_bigendian == file_bigendian) 205 return data; 206 207 swap = ((data & 0xffULL) << 24) | 208 ((data & (0xffULL << 8)) << 8) | 209 ((data & (0xffULL << 16)) >> 8) | 210 ((data & (0xffULL << 24)) >> 24); 211 212 return swap; 213} 214 215static inline unsigned long long __data2host8(unsigned long long data) 216{ 217 unsigned long long swap; 218 219 if (host_bigendian == file_bigendian) 220 return data; 221 222 swap = ((data & 0xffULL) << 56) | 223 ((data & (0xffULL << 8)) << 40) | 224 ((data & (0xffULL << 16)) << 24) | 225 ((data & (0xffULL << 24)) << 8) | 226 ((data & (0xffULL << 32)) >> 8) | 227 ((data & (0xffULL << 40)) >> 24) | 228 ((data & (0xffULL << 48)) >> 40) | 229 ((data & (0xffULL << 56)) >> 56); 230 231 return swap; 232} 233 234#define data2host2(ptr) __data2host2(*(unsigned short *)ptr) 235#define data2host4(ptr) __data2host4(*(unsigned int *)ptr) 236#define data2host8(ptr) ({ \ 237 unsigned long long __val; \ 238 \ 239 memcpy(&__val, (ptr), sizeof(unsigned long long)); \ 240 __data2host8(__val); \ 241}) 242 243extern int header_page_ts_offset; 244extern int header_page_ts_size; 245extern int header_page_size_offset; 246extern int header_page_size_size; 247extern int header_page_data_offset; 248extern int header_page_data_size; 249 250extern bool latency_format; 251 252int trace_parse_common_type(void *data); 253int trace_parse_common_pid(void *data); 254int parse_common_pc(void *data); 255int parse_common_flags(void *data); 256int parse_common_lock_depth(void *data); 257struct event *trace_find_event(int id); 258struct event *trace_find_next_event(struct event *event); 259unsigned long long read_size(void *ptr, int size); 260unsigned long long 261raw_field_value(struct event *event, const char *name, void *data); 262void *raw_field_ptr(struct event *event, const char *name, void *data); 263unsigned long long eval_flag(const char *flag); 264 265int read_tracing_data(int fd, struct list_head *pattrs); 266ssize_t read_tracing_data_size(int fd, struct list_head *pattrs); 267 268/* taken from kernel/trace/trace.h */ 269enum trace_flag_type { 270 TRACE_FLAG_IRQS_OFF = 0x01, 271 TRACE_FLAG_IRQS_NOSUPPORT = 0x02, 272 TRACE_FLAG_NEED_RESCHED = 0x04, 273 TRACE_FLAG_HARDIRQ = 0x08, 274 TRACE_FLAG_SOFTIRQ = 0x10, 275}; 276 277struct scripting_ops { 278 const char *name; 279 int (*start_script) (const char *script, int argc, const char **argv); 280 int (*stop_script) (void); 281 void (*process_event) (union perf_event *event, 282 struct perf_sample *sample, 283 struct perf_evsel *evsel, 284 struct perf_session *session, 285 struct thread *thread); 286 int (*generate_script) (const char *outfile); 287}; 288 289int script_spec_register(const char *spec, struct scripting_ops *ops); 290 291void setup_perl_scripting(void); 292void setup_python_scripting(void); 293 294struct scripting_context { 295 void *event_data; 296}; 297 298int common_pc(struct scripting_context *context); 299int common_flags(struct scripting_context *context); 300int common_lock_depth(struct scripting_context *context); 301 302#endif /* __PERF_TRACE_EVENTS_H */