Skip to content

Commit

Permalink
tracing: Allow irq/preempt tracers to be used by instances
Browse files Browse the repository at this point in the history
The irqsoff, preemptoff and preemptirqsoff tracers can now be used by
instances. But they may only be used by one instance at a time (including
the top level directory). This allows multiple tracers to run while the
irqsoff (and friends) tracer is running simultaneously.

Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
  • Loading branch information
Steven Rostedt (Red Hat) committed Apr 21, 2014
1 parent 65daaca commit 02f2f76
Showing 1 changed file with 17 additions and 7 deletions.
24 changes: 17 additions & 7 deletions kernel/trace/trace_irqsoff.c
Original file line number Diff line number Diff line change
Expand Up @@ -597,8 +597,13 @@ static void stop_irqsoff_tracer(struct trace_array *tr, int graph)
unregister_irqsoff_function(tr, graph);
}

static void __irqsoff_tracer_init(struct trace_array *tr)
static bool irqsoff_busy;

static int __irqsoff_tracer_init(struct trace_array *tr)
{
if (irqsoff_busy)
return -EBUSY;

save_flags = trace_flags;

/* non overwrite screws up the latency tracers */
Expand All @@ -617,6 +622,9 @@ static void __irqsoff_tracer_init(struct trace_array *tr)
if (start_irqsoff_tracer(tr, (tr->flags & TRACE_ARRAY_FL_GLOBAL &&
is_graph())))
printk(KERN_ERR "failed to start irqsoff tracer\n");

irqsoff_busy = true;
return 0;
}

static void irqsoff_tracer_reset(struct trace_array *tr)
Expand All @@ -629,6 +637,8 @@ static void irqsoff_tracer_reset(struct trace_array *tr)
set_tracer_flag(tr, TRACE_ITER_LATENCY_FMT, lat_flag);
set_tracer_flag(tr, TRACE_ITER_OVERWRITE, overwrite_flag);
ftrace_reset_array_ops(tr);

irqsoff_busy = false;
}

static void irqsoff_tracer_start(struct trace_array *tr)
Expand All @@ -646,8 +656,7 @@ static int irqsoff_tracer_init(struct trace_array *tr)
{
trace_type = TRACER_IRQS_OFF;

__irqsoff_tracer_init(tr);
return 0;
return __irqsoff_tracer_init(tr);
}
static struct tracer irqsoff_tracer __read_mostly =
{
Expand All @@ -667,6 +676,7 @@ static struct tracer irqsoff_tracer __read_mostly =
#endif
.open = irqsoff_trace_open,
.close = irqsoff_trace_close,
.allow_instances = true,
.use_max_tr = true,
};
# define register_irqsoff(trace) register_tracer(&trace)
Expand All @@ -679,8 +689,7 @@ static int preemptoff_tracer_init(struct trace_array *tr)
{
trace_type = TRACER_PREEMPT_OFF;

__irqsoff_tracer_init(tr);
return 0;
return __irqsoff_tracer_init(tr);
}

static struct tracer preemptoff_tracer __read_mostly =
Expand All @@ -701,6 +710,7 @@ static struct tracer preemptoff_tracer __read_mostly =
#endif
.open = irqsoff_trace_open,
.close = irqsoff_trace_close,
.allow_instances = true,
.use_max_tr = true,
};
# define register_preemptoff(trace) register_tracer(&trace)
Expand All @@ -715,8 +725,7 @@ static int preemptirqsoff_tracer_init(struct trace_array *tr)
{
trace_type = TRACER_IRQS_OFF | TRACER_PREEMPT_OFF;

__irqsoff_tracer_init(tr);
return 0;
return __irqsoff_tracer_init(tr);
}

static struct tracer preemptirqsoff_tracer __read_mostly =
Expand All @@ -737,6 +746,7 @@ static struct tracer preemptirqsoff_tracer __read_mostly =
#endif
.open = irqsoff_trace_open,
.close = irqsoff_trace_close,
.allow_instances = true,
.use_max_tr = true,
};

Expand Down

0 comments on commit 02f2f76

Please sign in to comment.