tracing/ftrace: Allow for the traceonoff probe be unique to instances
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>
This commit is contained in:
Родитель
cab5037950
Коммит
2290f2c589
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Загрузка…
Ссылка в новой задаче