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