|
@@ -1948,18 +1948,20 @@ void tracing_iter_reset(struct trace_iterator *iter, int cpu)
|
|
|
static void *s_start(struct seq_file *m, loff_t *pos)
|
|
|
{
|
|
|
struct trace_iterator *iter = m->private;
|
|
|
- static struct tracer *old_tracer;
|
|
|
int cpu_file = iter->cpu_file;
|
|
|
void *p = NULL;
|
|
|
loff_t l = 0;
|
|
|
int cpu;
|
|
|
|
|
|
- /* copy the tracer to avoid using a global lock all around */
|
|
|
+ /*
|
|
|
+ * copy the tracer to avoid using a global lock all around.
|
|
|
+ * iter->trace is a copy of current_trace, the pointer to the
|
|
|
+ * name may be used instead of a strcmp(), as iter->trace->name
|
|
|
+ * will point to the same string as current_trace->name.
|
|
|
+ */
|
|
|
mutex_lock(&trace_types_lock);
|
|
|
- if (unlikely(old_tracer != current_trace && current_trace)) {
|
|
|
- old_tracer = current_trace;
|
|
|
+ if (unlikely(current_trace && iter->trace->name != current_trace->name))
|
|
|
*iter->trace = *current_trace;
|
|
|
- }
|
|
|
mutex_unlock(&trace_types_lock);
|
|
|
|
|
|
atomic_inc(&trace_record_cmdline_disabled);
|
|
@@ -3494,7 +3496,6 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,
|
|
|
size_t cnt, loff_t *ppos)
|
|
|
{
|
|
|
struct trace_iterator *iter = filp->private_data;
|
|
|
- static struct tracer *old_tracer;
|
|
|
ssize_t sret;
|
|
|
|
|
|
/* return any leftover data */
|
|
@@ -3506,10 +3507,8 @@ tracing_read_pipe(struct file *filp, char __user *ubuf,
|
|
|
|
|
|
/* copy the tracer to avoid using a global lock all around */
|
|
|
mutex_lock(&trace_types_lock);
|
|
|
- if (unlikely(old_tracer != current_trace && current_trace)) {
|
|
|
- old_tracer = current_trace;
|
|
|
+ if (unlikely(current_trace && iter->trace->name != current_trace->name))
|
|
|
*iter->trace = *current_trace;
|
|
|
- }
|
|
|
mutex_unlock(&trace_types_lock);
|
|
|
|
|
|
/*
|
|
@@ -3665,7 +3664,6 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
|
|
|
.ops = &tracing_pipe_buf_ops,
|
|
|
.spd_release = tracing_spd_release_pipe,
|
|
|
};
|
|
|
- static struct tracer *old_tracer;
|
|
|
ssize_t ret;
|
|
|
size_t rem;
|
|
|
unsigned int i;
|
|
@@ -3675,10 +3673,8 @@ static ssize_t tracing_splice_read_pipe(struct file *filp,
|
|
|
|
|
|
/* copy the tracer to avoid using a global lock all around */
|
|
|
mutex_lock(&trace_types_lock);
|
|
|
- if (unlikely(old_tracer != current_trace && current_trace)) {
|
|
|
- old_tracer = current_trace;
|
|
|
+ if (unlikely(current_trace && iter->trace->name != current_trace->name))
|
|
|
*iter->trace = *current_trace;
|
|
|
- }
|
|
|
mutex_unlock(&trace_types_lock);
|
|
|
|
|
|
mutex_lock(&iter->mutex);
|