From: Ingo Molnar Date: Tue, 31 Mar 2009 15:46:40 +0000 (+0200) Subject: Merge branches 'tracing/docs', 'tracing/filters', 'tracing/ftrace', 'tracing/kprobes... X-Git-Url: http://www.pilppa.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=8b54e45b0005875f59cb8b1c44d429a161d5f245;p=linux-2.6-omap-h63xx.git Merge branches 'tracing/docs', 'tracing/filters', 'tracing/ftrace', 'tracing/kprobes', 'tracing/blktrace-v2' and 'tracing/textedit' into tracing/core-v2 --- 8b54e45b0005875f59cb8b1c44d429a161d5f245 diff --cc kernel/trace/trace.h index 7cfb741be20,90a848debcb,d7410bbb9a8,7cfb741be20,38276d1638e,7cfb741be20..cb0ce3fc36d --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@@@@@@ -775,24 -777,80 -776,24 -775,24 -777,18 -775,24 +778,80 @@@@@@@ enum TRACE_EVENT_TYPE_RAW = 2, }; + ++++struct ftrace_event_field { + ++++ struct list_head link; + ++++ char *name; + ++++ char *type; + ++++ int offset; + ++++ int size; + ++++}; + ++++ struct ftrace_event_call { - ---- char *name; - ---- char *system; - ---- struct dentry *dir; - ---- int enabled; - ---- int (*regfunc)(void); - ---- void (*unregfunc)(void); - ---- int id; - ---- int (*raw_init)(void); - ---- int (*show_format)(struct trace_seq *s); + ++++ char *name; + ++++ char *system; + ++++ struct dentry *dir; + ++++ int enabled; + ++++ int (*regfunc)(void); + ++++ void (*unregfunc)(void); + ++++ int id; + ++++ int (*raw_init)(void); + ++++ int (*show_format)(struct trace_seq *s); + ++++ int (*define_fields)(void); + ++++ struct list_head fields; + ++++ struct filter_pred **preds; + + #ifdef CONFIG_EVENT_PROFILE + atomic_t profile_count; + int (*profile_enable)(struct ftrace_event_call *); + void (*profile_disable)(struct ftrace_event_call *); + #endif }; + ++++struct event_subsystem { + ++++ struct list_head list; + ++++ const char *name; + ++++ struct dentry *entry; + ++++ struct filter_pred **preds; + ++++}; + ++++ + ++++#define events_for_each(event) \ + ++++ for (event = __start_ftrace_events; \ + ++++ (unsigned long)event < (unsigned long)__stop_ftrace_events; \ + ++++ event++) + ++++ + ++++#define MAX_FILTER_PRED 8 + ++++ + ++++struct filter_pred; + ++++ + ++++typedef int (*filter_pred_fn_t) (struct filter_pred *pred, void *event); + ++++ + ++++struct filter_pred { + ++++ filter_pred_fn_t fn; + ++++ u64 val; + ++++ char *str_val; + ++++ int str_len; + ++++ char *field_name; + ++++ int offset; + ++++ int not; + ++++ int or; + ++++ int compound; + ++++ int clear; + ++++}; + ++++ + ++++int trace_define_field(struct ftrace_event_call *call, char *type, + ++++ char *name, int offset, int size); + ++++extern void filter_free_pred(struct filter_pred *pred); + ++++extern void filter_print_preds(struct filter_pred **preds, + ++++ struct trace_seq *s); + ++++extern int filter_parse(char **pbuf, struct filter_pred *pred); + ++++extern int filter_add_pred(struct ftrace_event_call *call, + ++++ struct filter_pred *pred); + ++++extern void filter_free_preds(struct ftrace_event_call *call); + ++++extern int filter_match_preds(struct ftrace_event_call *call, void *rec); + ++++extern void filter_free_subsystem_preds(struct event_subsystem *system); + ++++extern int filter_add_subsystem_pred(struct event_subsystem *system, + ++++ struct filter_pred *pred); + ++++ void event_trace_printk(unsigned long ip, const char *fmt, ...); extern struct ftrace_event_call __start_ftrace_events[]; extern struct ftrace_event_call __stop_ftrace_events[];