From: "Steven Rostedt (VMware)" <rost...@goodmis.org>

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) <rost...@goodmis.org>
---
 kernel/trace/trace.c           |  4 ++--
 kernel/trace/trace.h           |  2 ++
 kernel/trace/trace_functions.c | 21 +++++++++++----------
 3 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 57e9c546bebb..60c904fa5480 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -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);
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 8f6754fba778..bc011c1f3d71 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -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,
diff --git a/kernel/trace/trace_functions.c b/kernel/trace/trace_functions.c
index 7775e1ca5bad..8c30ca733a5c 100644
--- a/kernel/trace/trace_functions.c
+++ b/kernel/trace/trace_functions.c
@@ -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);
 }
 
 /*
-- 
2.10.2


Reply via email to