]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - include/linux/ftrace_event.h
mac80211: fix PS-poll response, race
[mv-sheeva.git] / include / linux / ftrace_event.h
index 496b76d9f9d8348c760750337e6a295abe860db7..5c093ffc655bfd36c1579f539d5520a0ded30c15 100644 (file)
@@ -3,10 +3,25 @@
 
 #include <linux/trace_seq.h>
 #include <linux/ring_buffer.h>
-
+#include <linux/percpu.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
@@ -15,13 +30,16 @@ struct tracer;
  *     bash-15816 [01]   235.197585: idle_cpu <- irq_enter
  */
 struct trace_entry {
-       unsigned char           type;
+       unsigned short          type;
        unsigned char           flags;
        unsigned char           preempt_count;
        int                     pid;
        int                     tgid;
 };
 
+#define FTRACE_MAX_EVENT                                               \
+       ((1 << (sizeof(((struct trace_entry *)0)->type) * 8)) - 1)
+
 /*
  * Trace iterator - used by printout routines who present trace
  * results to users and which routines might sleep, etc:
@@ -33,6 +51,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;
@@ -40,7 +59,6 @@ struct trace_iterator {
        int                     cpu;
        u64                     ts;
 
-       unsigned long           iter_flags;
        loff_t                  pos;
        long                    idx;
 
@@ -52,6 +70,7 @@ typedef enum print_line_t (*trace_print_func)(struct trace_iterator *iter,
                                              int flags);
 struct trace_event {
        struct hlist_node       node;
+       struct list_head        list;
        int                     type;
        trace_print_func        trace;
        trace_print_func        raw;
@@ -72,7 +91,7 @@ enum print_line_t {
 
 
 struct ring_buffer_event *
-trace_current_buffer_lock_reserve(unsigned char type, unsigned long len,
+trace_current_buffer_lock_reserve(int type, unsigned long len,
                                  unsigned long flags, int pc);
 void trace_current_buffer_unlock_commit(struct ring_buffer_event *event,
                                        unsigned long flags, int pc);
@@ -83,9 +102,11 @@ void trace_current_buffer_discard_commit(struct ring_buffer_event *event);
 void tracing_record_cmdline(struct task_struct *tsk);
 
 struct ftrace_event_call {
+       struct list_head        list;
        char                    *name;
        char                    *system;
        struct dentry           *dir;
+       struct trace_event      *event;
        int                     enabled;
        int                     (*regfunc)(void);
        void                    (*unregfunc)(void);
@@ -94,8 +115,9 @@ struct ftrace_event_call {
        int                     (*show_format)(struct trace_seq *s);
        int                     (*define_fields)(void);
        struct list_head        fields;
-       int                     n_preds;
-       struct filter_pred      **preds;
+       int                     filter_active;
+       void                    *filter;
+       void                    *mod;
 
 #ifdef CONFIG_EVENT_PROFILE
        atomic_t        profile_count;
@@ -104,18 +126,22 @@ struct ftrace_event_call {
 #endif
 };
 
-#define MAX_FILTER_PRED                8
+#define MAX_FILTER_PRED                32
 #define MAX_FILTER_STR_VAL     128
 
 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,
                                        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);
+                             char *name, int offset, int size, int is_signed);
+
+#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
@@ -136,10 +162,10 @@ do {                                                                      \
                __trace_printk(ip, fmt, ##args);                        \
 } while (0)
 
-#define __common_field(type, item)                                     \
+#define __common_field(type, item, is_signed)                          \
        ret = trace_define_field(event_call, #type, "common_" #item,    \
                                 offsetof(typeof(field.ent), item),     \
-                                sizeof(field.ent.item));               \
+                                sizeof(field.ent.item), is_signed);    \
        if (ret)                                                        \
                return ret;