sh: convert /proc/cpu/aligmnent, /proc/cpu/kernel_alignment to seq_file
[safe/jmp/linux-2.6] / include / linux / ftrace_event.h
index 46a27f2..4ec5e67 100644 (file)
@@ -1,14 +1,29 @@
 #ifndef _LINUX_FTRACE_EVENT_H
 #define _LINUX_FTRACE_EVENT_H
 
-#include <linux/trace_seq.h>
 #include <linux/ring_buffer.h>
-
+#include <linux/trace_seq.h>
+#include <linux/percpu.h>
+#include <linux/hardirq.h>
 
 struct trace_array;
 struct tracer;
 struct dentry;
 
+DECLARE_PER_CPU(struct trace_seq, ftrace_event_seq);
+
+struct trace_print_flags {
+       unsigned long           mask;
+       const char              *name;
+};
+
+const char *ftrace_print_flags_seq(struct trace_seq *p, const char *delim,
+                                  unsigned long flags,
+                                  const struct trace_print_flags *flag_array);
+
+const char *ftrace_print_symbols_seq(struct trace_seq *p, unsigned long val,
+                                    const struct trace_print_flags *symbol_array);
+
 /*
  * The trace entry - the most basic unit of tracing. This is what
  * is printed in the end as a single line in the trace output, such as:
@@ -20,7 +35,7 @@ struct trace_entry {
        unsigned char           flags;
        unsigned char           preempt_count;
        int                     pid;
-       int                     tgid;
+       int                     lock_depth;
 };
 
 #define FTRACE_MAX_EVENT                                               \
@@ -37,6 +52,7 @@ struct trace_iterator {
        int                     cpu_file;
        struct mutex            mutex;
        struct ring_buffer_iter *buffer_iter[NR_CPUS];
+       unsigned long           iter_flags;
 
        /* The below is zeroed out in pipe_read */
        struct trace_seq        seq;
@@ -44,7 +60,6 @@ struct trace_iterator {
        int                     cpu;
        u64                     ts;
 
-       unsigned long           iter_flags;
        loff_t                  pos;
        long                    idx;
 
@@ -75,18 +90,26 @@ enum print_line_t {
        TRACE_TYPE_NO_CONSUME   = 3     /* Handled but ask to not consume */
 };
 
-
+void tracing_generic_entry_update(struct trace_entry *entry,
+                                 unsigned long flags,
+                                 int pc);
 struct ring_buffer_event *
-trace_current_buffer_lock_reserve(int type, unsigned long len,
+trace_current_buffer_lock_reserve(struct ring_buffer **current_buffer,
+                                 int type, unsigned long len,
                                  unsigned long flags, int pc);
-void trace_current_buffer_unlock_commit(struct ring_buffer_event *event,
+void trace_current_buffer_unlock_commit(struct ring_buffer *buffer,
+                                       struct ring_buffer_event *event,
                                        unsigned long flags, int pc);
-void trace_nowake_buffer_unlock_commit(struct ring_buffer_event *event,
+void trace_nowake_buffer_unlock_commit(struct ring_buffer *buffer,
+                                      struct ring_buffer_event *event,
                                        unsigned long flags, int pc);
-void trace_current_buffer_discard_commit(struct ring_buffer_event *event);
+void trace_current_buffer_discard_commit(struct ring_buffer *buffer,
+                                        struct ring_buffer_event *event);
 
 void tracing_record_cmdline(struct task_struct *tsk);
 
+struct event_filter;
+
 struct ftrace_event_call {
        struct list_head        list;
        char                    *name;
@@ -94,36 +117,55 @@ struct ftrace_event_call {
        struct dentry           *dir;
        struct trace_event      *event;
        int                     enabled;
-       int                     (*regfunc)(void);
-       void                    (*unregfunc)(void);
+       int                     (*regfunc)(void *);
+       void                    (*unregfunc)(void *);
        int                     id;
        int                     (*raw_init)(void);
-       int                     (*show_format)(struct trace_seq *s);
-       int                     (*define_fields)(void);
+       int                     (*show_format)(struct ftrace_event_call *call,
+                                              struct trace_seq *s);
+       int                     (*define_fields)(struct ftrace_event_call *);
        struct list_head        fields;
        int                     filter_active;
-       void                    *filter;
+       struct event_filter     *filter;
        void                    *mod;
+       void                    *data;
 
-#ifdef CONFIG_EVENT_PROFILE
-       atomic_t        profile_count;
-       int             (*profile_enable)(struct ftrace_event_call *);
-       void            (*profile_disable)(struct ftrace_event_call *);
-#endif
+       atomic_t                profile_count;
+       int                     (*profile_enable)(void);
+       void                    (*profile_disable)(void);
 };
 
-#define MAX_FILTER_PRED                8
-#define MAX_FILTER_STR_VAL     128
+#define FTRACE_MAX_PROFILE_SIZE        2048
+
+extern char                    *trace_profile_buf;
+extern char                    *trace_profile_buf_nmi;
+
+#define MAX_FILTER_PRED                32
+#define MAX_FILTER_STR_VAL     256     /* Should handle KSYM_SYMBOL_LEN */
 
-extern int init_preds(struct ftrace_event_call *call);
+extern void destroy_preds(struct ftrace_event_call *call);
 extern int filter_match_preds(struct ftrace_event_call *call, void *rec);
-extern int filter_current_check_discard(struct ftrace_event_call *call,
+extern int filter_current_check_discard(struct ring_buffer *buffer,
+                                       struct ftrace_event_call *call,
                                        void *rec,
                                        struct ring_buffer_event *event);
 
-extern int trace_define_field(struct ftrace_event_call *call, char *type,
-                             char *name, int offset, int size);
+enum {
+       FILTER_OTHER = 0,
+       FILTER_STATIC_STRING,
+       FILTER_DYN_STRING,
+       FILTER_PTR_STRING,
+};
+
+extern int trace_define_field(struct ftrace_event_call *call,
+                             const char *type, const char *name,
+                             int offset, int size, int is_signed,
+                             int filter_type);
+extern int trace_define_common_fields(struct ftrace_event_call *call);
 
+#define is_signed_type(type)   (((type)(-1)) < 0)
+
+int trace_set_clr_event(const char *system, const char *event, int set);
 
 /*
  * The double __builtin_constant_p is because gcc will give us an error
@@ -144,11 +186,4 @@ do {                                                                       \
                __trace_printk(ip, fmt, ##args);                        \
 } while (0)
 
-#define __common_field(type, item)                                     \
-       ret = trace_define_field(event_call, #type, "common_" #item,    \
-                                offsetof(typeof(field.ent), item),     \
-                                sizeof(field.ent.item));               \
-       if (ret)                                                        \
-               return ret;
-
 #endif /* _LINUX_FTRACE_EVENT_H */