]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
tracing/ftrace: Allow for the traceonoff probe be unique to instances
authorSteven Rostedt (VMware) <rostedt@goodmis.org>
Thu, 20 Apr 2017 15:46:03 +0000 (11:46 -0400)
committerSteven Rostedt (VMware) <rostedt@goodmis.org>
Fri, 21 Apr 2017 02:06:48 +0000 (22:06 -0400)
Have the traceon/off function probe triggers affect only the instance they
are set in. This required making the trace_on/off accessible for other files
in the tracing directory.

Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
kernel/trace/trace.c
kernel/trace/trace.h
kernel/trace/trace_functions.c

index 57e9c546bebbdcb47d7c402dc0eb9071f480f558..60c904fa548084b71a33d5e4f2c1a456b268bede 100644 (file)
@@ -757,7 +757,7 @@ __trace_buffer_lock_reserve(struct ring_buffer *buffer,
        return event;
 }
 
-static void tracer_tracing_on(struct trace_array *tr)
+void tracer_tracing_on(struct trace_array *tr)
 {
        if (tr->trace_buffer.buffer)
                ring_buffer_record_on(tr->trace_buffer.buffer);
@@ -1045,7 +1045,7 @@ void tracing_snapshot_alloc(void)
 EXPORT_SYMBOL_GPL(tracing_snapshot_alloc);
 #endif /* CONFIG_TRACER_SNAPSHOT */
 
-static void tracer_tracing_off(struct trace_array *tr)
+void tracer_tracing_off(struct trace_array *tr)
 {
        if (tr->trace_buffer.buffer)
                ring_buffer_record_off(tr->trace_buffer.buffer);
index 8f6754fba77823424f423713c27ff9ebaaea5bb7..bc011c1f3d71c22392280931b82f73a0a46a3a09 100644 (file)
@@ -582,6 +582,8 @@ void tracing_reset_all_online_cpus(void);
 int tracing_open_generic(struct inode *inode, struct file *filp);
 bool tracing_is_disabled(void);
 int tracer_tracing_is_on(struct trace_array *tr);
+void tracer_tracing_on(struct trace_array *tr);
+void tracer_tracing_off(struct trace_array *tr);
 struct dentry *trace_create_file(const char *name,
                                 umode_t mode,
                                 struct dentry *parent,
index 7775e1ca5badb304acf25ecf840c26d47c5d6121..8c30ca733a5c84d460b26e7f7f0780be123467db 100644 (file)
@@ -268,7 +268,8 @@ static struct tracer function_trace __tracer_data =
 
 #ifdef CONFIG_DYNAMIC_FTRACE
 static void update_traceon_count(struct ftrace_probe_ops *ops,
-                                unsigned long ip, bool on,
+                                unsigned long ip,
+                                struct trace_array *tr, bool on,
                                 void *data)
 {
        struct ftrace_func_mapper *mapper = data;
@@ -313,13 +314,13 @@ static void update_traceon_count(struct ftrace_probe_ops *ops,
        /* Make sure we see count before checking tracing state */
        smp_rmb();
 
-       if (on == !!tracing_is_on())
+       if (on == !!tracer_tracing_is_on(tr))
                return;
 
        if (on)
-               tracing_on();
+               tracer_tracing_on(tr);
        else
-               tracing_off();
+               tracer_tracing_off(tr);
 
        /* Make sure tracing state is visible before updating count */
        smp_wmb();
@@ -332,7 +333,7 @@ ftrace_traceon_count(unsigned long ip, unsigned long parent_ip,
                     struct trace_array *tr, struct ftrace_probe_ops *ops,
                     void *data)
 {
-       update_traceon_count(ops, ip, 1, data);
+       update_traceon_count(ops, ip, tr, 1, data);
 }
 
 static void
@@ -340,7 +341,7 @@ ftrace_traceoff_count(unsigned long ip, unsigned long parent_ip,
                      struct trace_array *tr, struct ftrace_probe_ops *ops,
                      void *data)
 {
-       update_traceon_count(ops, ip, 0, data);
+       update_traceon_count(ops, ip, tr, 0, data);
 }
 
 static void
@@ -348,10 +349,10 @@ ftrace_traceon(unsigned long ip, unsigned long parent_ip,
               struct trace_array *tr, struct ftrace_probe_ops *ops,
               void *data)
 {
-       if (tracing_is_on())
+       if (tracer_tracing_is_on(tr))
                return;
 
-       tracing_on();
+       tracer_tracing_on(tr);
 }
 
 static void
@@ -359,10 +360,10 @@ ftrace_traceoff(unsigned long ip, unsigned long parent_ip,
                struct trace_array *tr, struct ftrace_probe_ops *ops,
                void *data)
 {
-       if (!tracing_is_on())
+       if (!tracer_tracing_is_on(tr))
                return;
 
-       tracing_off();
+       tracer_tracing_off(tr);
 }
 
 /*