]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - kernel/trace/trace.h
ftrace: remove printks from irqsoff trace
[mv-sheeva.git] / kernel / trace / trace.h
index 25cba28eb9baa104323088eae62bc5ca6c53ec3a..c460e85e94ed81ddb64283c9bb4ea7749a384663 100644 (file)
@@ -6,6 +6,18 @@
 #include <linux/sched.h>
 #include <linux/clocksource.h>
 
+enum trace_type {
+       __TRACE_FIRST_TYPE = 0,
+
+       TRACE_FN,
+       TRACE_CTX,
+       TRACE_WAKE,
+       TRACE_STACK,
+       TRACE_SPECIAL,
+
+       __TRACE_LAST_TYPE
+};
+
 /*
  * Function trace entry - function address and parent function addres:
  */
@@ -39,7 +51,7 @@ struct special_entry {
  * Stack-trace entry:
  */
 
-#define FTRACE_STACK_ENTRIES   5
+#define FTRACE_STACK_ENTRIES   8
 
 struct stack_entry {
        unsigned long           caller[FTRACE_STACK_ENTRIES];
@@ -85,6 +97,7 @@ struct trace_array_cpu {
        void                    *trace_head; /* producer */
        void                    *trace_tail; /* consumer */
        unsigned long           trace_idx;
+       unsigned long           overrun;
        unsigned long           saved_latency;
        unsigned long           critical_start;
        unsigned long           critical_end;
@@ -122,14 +135,19 @@ struct tracer {
        void                    (*init)(struct trace_array *tr);
        void                    (*reset)(struct trace_array *tr);
        void                    (*open)(struct trace_iterator *iter);
+       void                    (*pipe_open)(struct trace_iterator *iter);
        void                    (*close)(struct trace_iterator *iter);
        void                    (*start)(struct trace_iterator *iter);
        void                    (*stop)(struct trace_iterator *iter);
+       ssize_t                 (*read)(struct trace_iterator *iter,
+                                       struct file *filp, char __user *ubuf,
+                                       size_t cnt, loff_t *ppos);
        void                    (*ctrl_update)(struct trace_array *tr);
 #ifdef CONFIG_FTRACE_STARTUP_TEST
        int                     (*selftest)(struct tracer *trace,
                                            struct trace_array *tr);
 #endif
+       int                     (*print_line)(struct trace_iterator *iter);
        struct tracer           *next;
        int                     print_max;
 };
@@ -137,6 +155,7 @@ struct tracer {
 struct trace_seq {
        unsigned char           buffer[PAGE_SIZE];
        unsigned int            len;
+       unsigned int            readpos;
 };
 
 /*
@@ -144,10 +163,14 @@ struct trace_seq {
  * results to users and which routines might sleep, etc:
  */
 struct trace_iterator {
-       struct trace_seq        seq;
        struct trace_array      *tr;
        struct tracer           *trace;
+       void                    *private;
+       long                    last_overrun[NR_CPUS];
+       long                    overrun[NR_CPUS];
 
+       /* The below is zeroed out in pipe_read */
+       struct trace_seq        seq;
        struct trace_entry      *ent;
        int                     cpu;
 
@@ -203,31 +226,18 @@ extern unsigned long nsecs_to_usecs(unsigned long nsecs);
 extern unsigned long tracing_max_latency;
 extern unsigned long tracing_thresh;
 
+extern atomic_t trace_record_cmdline_enabled;
+
 void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
 void update_max_tr_single(struct trace_array *tr,
                          struct task_struct *tsk, int cpu);
 
 extern cycle_t ftrace_now(int cpu);
 
-#ifdef CONFIG_SCHED_TRACER
-extern void
-wakeup_sched_switch(struct task_struct *prev, struct task_struct *next);
-extern void
-wakeup_sched_wakeup(struct task_struct *wakee, struct task_struct *curr);
-#else
-static inline void
-wakeup_sched_switch(struct task_struct *prev, struct task_struct *next)
-{
-}
-static inline void
-wakeup_sched_wakeup(struct task_struct *wakee, struct task_struct *curr)
-{
-}
-#endif
-
 #ifdef CONFIG_CONTEXT_SWITCH_TRACER
 typedef void
 (*tracer_switch_func_t)(void *private,
+                       void *__rq,
                        struct task_struct *prev,
                        struct task_struct *next);
 
@@ -237,9 +247,6 @@ struct tracer_switch_ops {
        struct tracer_switch_ops        *next;
 };
 
-extern int register_tracer_switch(struct tracer_switch_ops *ops);
-extern int unregister_tracer_switch(struct tracer_switch_ops *ops);
-
 #endif /* CONFIG_CONTEXT_SWITCH_TRACER */
 
 #ifdef CONFIG_DYNAMIC_FTRACE
@@ -276,9 +283,20 @@ extern int trace_selftest_startup_sched_switch(struct tracer *trace,
 #endif /* CONFIG_FTRACE_STARTUP_TEST */
 
 extern void *head_page(struct trace_array_cpu *data);
+extern int trace_seq_printf(struct trace_seq *s, const char *fmt, ...);
+extern ssize_t trace_seq_to_user(struct trace_seq *s, char __user *ubuf,
+                                size_t cnt);
+extern long ns2usecs(cycle_t nsec);
 
 extern unsigned long trace_flags;
 
+/*
+ * trace_iterator_flags is an enumeration that defines bit
+ * positions into trace_flags that controls the output.
+ *
+ * NOTE: These bits must match the trace_options array in
+ *       trace.c.
+ */
 enum trace_iterator_flags {
        TRACE_ITER_PRINT_PARENT         = 0x01,
        TRACE_ITER_SYM_OFFSET           = 0x02,