diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-04-07 07:47:33 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-04-07 07:47:45 -0400 |
commit | 93776a8ec746cf9d32c36e5a5b23d28d8be28826 (patch) | |
tree | 6c472ae9f709246ee5268e1d71559d07839fb965 /kernel/trace/trace.h | |
parent | 34886c8bc590f078d4c0b88f50d061326639198d (diff) | |
parent | d508afb437daee7cf07da085b635c44a4ebf9b38 (diff) |
Merge branch 'linus' into tracing/core
Merge reason: update to upstream tracing facilities
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/trace.h')
-rw-r--r-- | kernel/trace/trace.h | 82 |
1 files changed, 73 insertions, 9 deletions
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index e3429a8ab059..fec6521ffa13 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h | |||
@@ -182,6 +182,12 @@ struct trace_power { | |||
182 | struct power_trace state_data; | 182 | struct power_trace state_data; |
183 | }; | 183 | }; |
184 | 184 | ||
185 | enum kmemtrace_type_id { | ||
186 | KMEMTRACE_TYPE_KMALLOC = 0, /* kmalloc() or kfree(). */ | ||
187 | KMEMTRACE_TYPE_CACHE, /* kmem_cache_*(). */ | ||
188 | KMEMTRACE_TYPE_PAGES, /* __get_free_pages() and friends. */ | ||
189 | }; | ||
190 | |||
185 | struct kmemtrace_alloc_entry { | 191 | struct kmemtrace_alloc_entry { |
186 | struct trace_entry ent; | 192 | struct trace_entry ent; |
187 | enum kmemtrace_type_id type_id; | 193 | enum kmemtrace_type_id type_id; |
@@ -483,6 +489,8 @@ trace_current_buffer_lock_reserve(unsigned char type, unsigned long len, | |||
483 | unsigned long flags, int pc); | 489 | unsigned long flags, int pc); |
484 | void trace_current_buffer_unlock_commit(struct ring_buffer_event *event, | 490 | void trace_current_buffer_unlock_commit(struct ring_buffer_event *event, |
485 | unsigned long flags, int pc); | 491 | unsigned long flags, int pc); |
492 | void trace_nowake_buffer_unlock_commit(struct ring_buffer_event *event, | ||
493 | unsigned long flags, int pc); | ||
486 | 494 | ||
487 | struct trace_entry *tracing_get_trace_entry(struct trace_array *tr, | 495 | struct trace_entry *tracing_get_trace_entry(struct trace_array *tr, |
488 | struct trace_array_cpu *data); | 496 | struct trace_array_cpu *data); |
@@ -778,16 +786,27 @@ enum { | |||
778 | TRACE_EVENT_TYPE_RAW = 2, | 786 | TRACE_EVENT_TYPE_RAW = 2, |
779 | }; | 787 | }; |
780 | 788 | ||
789 | struct ftrace_event_field { | ||
790 | struct list_head link; | ||
791 | char *name; | ||
792 | char *type; | ||
793 | int offset; | ||
794 | int size; | ||
795 | }; | ||
796 | |||
781 | struct ftrace_event_call { | 797 | struct ftrace_event_call { |
782 | char *name; | 798 | char *name; |
783 | char *system; | 799 | char *system; |
784 | struct dentry *dir; | 800 | struct dentry *dir; |
785 | int enabled; | 801 | int enabled; |
786 | int (*regfunc)(void); | 802 | int (*regfunc)(void); |
787 | void (*unregfunc)(void); | 803 | void (*unregfunc)(void); |
788 | int id; | 804 | int id; |
789 | int (*raw_init)(void); | 805 | int (*raw_init)(void); |
790 | int (*show_format)(struct trace_seq *s); | 806 | int (*show_format)(struct trace_seq *s); |
807 | int (*define_fields)(void); | ||
808 | struct list_head fields; | ||
809 | struct filter_pred **preds; | ||
791 | 810 | ||
792 | #ifdef CONFIG_EVENT_PROFILE | 811 | #ifdef CONFIG_EVENT_PROFILE |
793 | atomic_t profile_count; | 812 | atomic_t profile_count; |
@@ -796,6 +815,51 @@ struct ftrace_event_call { | |||
796 | #endif | 815 | #endif |
797 | }; | 816 | }; |
798 | 817 | ||
818 | struct event_subsystem { | ||
819 | struct list_head list; | ||
820 | const char *name; | ||
821 | struct dentry *entry; | ||
822 | struct filter_pred **preds; | ||
823 | }; | ||
824 | |||
825 | #define events_for_each(event) \ | ||
826 | for (event = __start_ftrace_events; \ | ||
827 | (unsigned long)event < (unsigned long)__stop_ftrace_events; \ | ||
828 | event++) | ||
829 | |||
830 | #define MAX_FILTER_PRED 8 | ||
831 | |||
832 | struct filter_pred; | ||
833 | |||
834 | typedef int (*filter_pred_fn_t) (struct filter_pred *pred, void *event); | ||
835 | |||
836 | struct filter_pred { | ||
837 | filter_pred_fn_t fn; | ||
838 | u64 val; | ||
839 | char *str_val; | ||
840 | int str_len; | ||
841 | char *field_name; | ||
842 | int offset; | ||
843 | int not; | ||
844 | int or; | ||
845 | int compound; | ||
846 | int clear; | ||
847 | }; | ||
848 | |||
849 | int trace_define_field(struct ftrace_event_call *call, char *type, | ||
850 | char *name, int offset, int size); | ||
851 | extern void filter_free_pred(struct filter_pred *pred); | ||
852 | extern void filter_print_preds(struct filter_pred **preds, | ||
853 | struct trace_seq *s); | ||
854 | extern int filter_parse(char **pbuf, struct filter_pred *pred); | ||
855 | extern int filter_add_pred(struct ftrace_event_call *call, | ||
856 | struct filter_pred *pred); | ||
857 | extern void filter_free_preds(struct ftrace_event_call *call); | ||
858 | extern int filter_match_preds(struct ftrace_event_call *call, void *rec); | ||
859 | extern void filter_free_subsystem_preds(struct event_subsystem *system); | ||
860 | extern int filter_add_subsystem_pred(struct event_subsystem *system, | ||
861 | struct filter_pred *pred); | ||
862 | |||
799 | void event_trace_printk(unsigned long ip, const char *fmt, ...); | 863 | void event_trace_printk(unsigned long ip, const char *fmt, ...); |
800 | extern struct ftrace_event_call __start_ftrace_events[]; | 864 | extern struct ftrace_event_call __start_ftrace_events[]; |
801 | extern struct ftrace_event_call __stop_ftrace_events[]; | 865 | extern struct ftrace_event_call __stop_ftrace_events[]; |