]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/trace/trace.c
Merge branch 'for-jeff' of git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux...
[linux-2.6-omap-h63xx.git] / kernel / trace / trace.c
index 4a875600733b13654d03251a254a51d0b4f2c248..8f3fb3db61c39306bdbffd36303cfed7dab02420 100644 (file)
@@ -96,6 +96,9 @@ static DEFINE_PER_CPU(struct trace_array_cpu, max_data);
 /* tracer_enabled is used to toggle activation of a tracer */
 static int                     tracer_enabled = 1;
 
+/* function tracing enabled */
+int                            ftrace_function_enabled;
+
 /*
  * trace_nr_entries is the number of entries that is allocated
  * for a buffer. Note, the number of entries is always rounded
@@ -134,6 +137,7 @@ static notrace void no_trace_init(struct trace_array *tr)
 {
        int cpu;
 
+       ftrace_function_enabled = 0;
        if(tr->ctrl)
                for_each_online_cpu(cpu)
                        tracing_reset(tr->data[cpu]);
@@ -1027,7 +1031,7 @@ function_trace_call(unsigned long ip, unsigned long parent_ip)
        long disabled;
        int cpu;
 
-       if (unlikely(!tracer_enabled))
+       if (unlikely(!ftrace_function_enabled))
                return;
 
        if (skip_trace(ip))
@@ -1052,11 +1056,15 @@ static struct ftrace_ops trace_ops __read_mostly =
 
 void tracing_start_function_trace(void)
 {
+       ftrace_function_enabled = 0;
        register_ftrace_function(&trace_ops);
+       if (tracer_enabled)
+               ftrace_function_enabled = 1;
 }
 
 void tracing_stop_function_trace(void)
 {
+       ftrace_function_enabled = 0;
        unregister_ftrace_function(&trace_ops);
 }
 #endif
@@ -1175,7 +1183,6 @@ static void *find_next_entry_inc(struct trace_iterator *iter)
 static void *s_next(struct seq_file *m, void *v, loff_t *pos)
 {
        struct trace_iterator *iter = m->private;
-       void *last_ent = iter->ent;
        int i = (int)*pos;
        void *ent;
 
@@ -1195,9 +1202,6 @@ static void *s_next(struct seq_file *m, void *v, loff_t *pos)
 
        iter->pos = *pos;
 
-       if (last_ent && !ent)
-               seq_puts(m, "\n\nvim:ft=help\n");
-
        return ent;
 }
 
@@ -1383,7 +1387,7 @@ print_trace_header(struct seq_file *m, struct trace_iterator *iter)
                   "server",
 #elif defined(CONFIG_PREEMPT_VOLUNTARY)
                   "desktop",
-#elif defined(CONFIG_PREEMPT_DESKTOP)
+#elif defined(CONFIG_PREEMPT)
                   "preempt",
 #else
                   "unknown",
@@ -1892,8 +1896,10 @@ __tracing_open(struct inode *inode, struct file *file, int *ret)
                m->private = iter;
 
                /* stop the trace while dumping */
-               if (iter->tr->ctrl)
+               if (iter->tr->ctrl) {
                        tracer_enabled = 0;
+                       ftrace_function_enabled = 0;
+               }
 
                if (iter->trace && iter->trace->open)
                        iter->trace->open(iter);
@@ -1926,8 +1932,14 @@ int tracing_release(struct inode *inode, struct file *file)
                iter->trace->close(iter);
 
        /* reenable tracing if it was previously enabled */
-       if (iter->tr->ctrl)
+       if (iter->tr->ctrl) {
                tracer_enabled = 1;
+               /*
+                * It is safe to enable function tracing even if it
+                * isn't used
+                */
+               ftrace_function_enabled = 1;
+       }
        mutex_unlock(&trace_types_lock);
 
        seq_release(inode, file);
@@ -2913,6 +2925,9 @@ static __init void tracer_init_debugfs(void)
                pr_warning("Could not create debugfs "
                           "'dyn_ftrace_total_info' entry\n");
 #endif
+#ifdef CONFIG_SYSPROF_TRACER
+       init_tracer_sysprof_debugfs(d_tracer);
+#endif
 }
 
 static int trace_alloc_page(void)