tracing: Move trace_flags from global to a trace_array field
In preparation to make trace options per instance, the global trace_flags needs to be moved from being a global variable to a field within the trace instance trace_array structure. There's still more work to do, as there's some functions that use trace_flags without passing in a way to get to the current_trace array. For those, the global_trace is used directly (from trace.c). This includes setting and clearing the trace_flags. This means that when a new instance is created, it just gets the trace_flags of the global_trace and will not be able to modify them. Depending on the functions that have access to the trace_array, the flags of an instance may not affect parts of its trace, where the global_trace is used. These will be fixed in future changes. Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:

committed by
Steven Rostedt

parent
5557720415
commit
983f938ae6
@@ -112,8 +112,8 @@ enum {
|
||||
};
|
||||
|
||||
static void
|
||||
print_graph_duration(unsigned long long duration, struct trace_seq *s,
|
||||
u32 flags);
|
||||
print_graph_duration(struct trace_array *tr, unsigned long long duration,
|
||||
struct trace_seq *s, u32 flags);
|
||||
|
||||
/* Add a function return address to the trace stack on thread info.*/
|
||||
int
|
||||
@@ -658,6 +658,7 @@ static void
|
||||
print_graph_irq(struct trace_iterator *iter, unsigned long addr,
|
||||
enum trace_type type, int cpu, pid_t pid, u32 flags)
|
||||
{
|
||||
struct trace_array *tr = iter->tr;
|
||||
struct trace_seq *s = &iter->seq;
|
||||
struct trace_entry *ent = iter->ent;
|
||||
|
||||
@@ -665,7 +666,7 @@ print_graph_irq(struct trace_iterator *iter, unsigned long addr,
|
||||
addr >= (unsigned long)__irqentry_text_end)
|
||||
return;
|
||||
|
||||
if (trace_flags & TRACE_ITER_CONTEXT_INFO) {
|
||||
if (tr->trace_flags & TRACE_ITER_CONTEXT_INFO) {
|
||||
/* Absolute time */
|
||||
if (flags & TRACE_GRAPH_PRINT_ABS_TIME)
|
||||
print_graph_abs_time(iter->ts, s);
|
||||
@@ -681,19 +682,19 @@ print_graph_irq(struct trace_iterator *iter, unsigned long addr,
|
||||
}
|
||||
|
||||
/* Latency format */
|
||||
if (trace_flags & TRACE_ITER_LATENCY_FMT)
|
||||
if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
|
||||
print_graph_lat_fmt(s, ent);
|
||||
}
|
||||
|
||||
/* No overhead */
|
||||
print_graph_duration(0, s, flags | FLAGS_FILL_START);
|
||||
print_graph_duration(tr, 0, s, flags | FLAGS_FILL_START);
|
||||
|
||||
if (type == TRACE_GRAPH_ENT)
|
||||
trace_seq_puts(s, "==========>");
|
||||
else
|
||||
trace_seq_puts(s, "<==========");
|
||||
|
||||
print_graph_duration(0, s, flags | FLAGS_FILL_END);
|
||||
print_graph_duration(tr, 0, s, flags | FLAGS_FILL_END);
|
||||
trace_seq_putc(s, '\n');
|
||||
}
|
||||
|
||||
@@ -731,11 +732,11 @@ trace_print_graph_duration(unsigned long long duration, struct trace_seq *s)
|
||||
}
|
||||
|
||||
static void
|
||||
print_graph_duration(unsigned long long duration, struct trace_seq *s,
|
||||
u32 flags)
|
||||
print_graph_duration(struct trace_array *tr, unsigned long long duration,
|
||||
struct trace_seq *s, u32 flags)
|
||||
{
|
||||
if (!(flags & TRACE_GRAPH_PRINT_DURATION) ||
|
||||
!(trace_flags & TRACE_ITER_CONTEXT_INFO))
|
||||
!(tr->trace_flags & TRACE_ITER_CONTEXT_INFO))
|
||||
return;
|
||||
|
||||
/* No real adata, just filling the column with spaces */
|
||||
@@ -769,6 +770,7 @@ print_graph_entry_leaf(struct trace_iterator *iter,
|
||||
struct trace_seq *s, u32 flags)
|
||||
{
|
||||
struct fgraph_data *data = iter->private;
|
||||
struct trace_array *tr = iter->tr;
|
||||
struct ftrace_graph_ret *graph_ret;
|
||||
struct ftrace_graph_ent *call;
|
||||
unsigned long long duration;
|
||||
@@ -797,7 +799,7 @@ print_graph_entry_leaf(struct trace_iterator *iter,
|
||||
}
|
||||
|
||||
/* Overhead and duration */
|
||||
print_graph_duration(duration, s, flags);
|
||||
print_graph_duration(tr, duration, s, flags);
|
||||
|
||||
/* Function */
|
||||
for (i = 0; i < call->depth * TRACE_GRAPH_INDENT; i++)
|
||||
@@ -815,6 +817,7 @@ print_graph_entry_nested(struct trace_iterator *iter,
|
||||
{
|
||||
struct ftrace_graph_ent *call = &entry->graph_ent;
|
||||
struct fgraph_data *data = iter->private;
|
||||
struct trace_array *tr = iter->tr;
|
||||
int i;
|
||||
|
||||
if (data) {
|
||||
@@ -830,7 +833,7 @@ print_graph_entry_nested(struct trace_iterator *iter,
|
||||
}
|
||||
|
||||
/* No time */
|
||||
print_graph_duration(0, s, flags | FLAGS_FILL_FULL);
|
||||
print_graph_duration(tr, 0, s, flags | FLAGS_FILL_FULL);
|
||||
|
||||
/* Function */
|
||||
for (i = 0; i < call->depth * TRACE_GRAPH_INDENT; i++)
|
||||
@@ -854,6 +857,7 @@ print_graph_prologue(struct trace_iterator *iter, struct trace_seq *s,
|
||||
{
|
||||
struct fgraph_data *data = iter->private;
|
||||
struct trace_entry *ent = iter->ent;
|
||||
struct trace_array *tr = iter->tr;
|
||||
int cpu = iter->cpu;
|
||||
|
||||
/* Pid */
|
||||
@@ -863,7 +867,7 @@ print_graph_prologue(struct trace_iterator *iter, struct trace_seq *s,
|
||||
/* Interrupt */
|
||||
print_graph_irq(iter, addr, type, cpu, ent->pid, flags);
|
||||
|
||||
if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
|
||||
if (!(tr->trace_flags & TRACE_ITER_CONTEXT_INFO))
|
||||
return;
|
||||
|
||||
/* Absolute time */
|
||||
@@ -881,7 +885,7 @@ print_graph_prologue(struct trace_iterator *iter, struct trace_seq *s,
|
||||
}
|
||||
|
||||
/* Latency format */
|
||||
if (trace_flags & TRACE_ITER_LATENCY_FMT)
|
||||
if (tr->trace_flags & TRACE_ITER_LATENCY_FMT)
|
||||
print_graph_lat_fmt(s, ent);
|
||||
|
||||
return;
|
||||
@@ -1032,6 +1036,7 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
|
||||
{
|
||||
unsigned long long duration = trace->rettime - trace->calltime;
|
||||
struct fgraph_data *data = iter->private;
|
||||
struct trace_array *tr = iter->tr;
|
||||
pid_t pid = ent->pid;
|
||||
int cpu = iter->cpu;
|
||||
int func_match = 1;
|
||||
@@ -1063,7 +1068,7 @@ print_graph_return(struct ftrace_graph_ret *trace, struct trace_seq *s,
|
||||
print_graph_prologue(iter, s, 0, 0, flags);
|
||||
|
||||
/* Overhead and duration */
|
||||
print_graph_duration(duration, s, flags);
|
||||
print_graph_duration(tr, duration, s, flags);
|
||||
|
||||
/* Closing brace */
|
||||
for (i = 0; i < trace->depth * TRACE_GRAPH_INDENT; i++)
|
||||
@@ -1096,7 +1101,8 @@ static enum print_line_t
|
||||
print_graph_comment(struct trace_seq *s, struct trace_entry *ent,
|
||||
struct trace_iterator *iter, u32 flags)
|
||||
{
|
||||
unsigned long sym_flags = (trace_flags & TRACE_ITER_SYM_MASK);
|
||||
struct trace_array *tr = iter->tr;
|
||||
unsigned long sym_flags = (tr->trace_flags & TRACE_ITER_SYM_MASK);
|
||||
struct fgraph_data *data = iter->private;
|
||||
struct trace_event *event;
|
||||
int depth = 0;
|
||||
@@ -1109,7 +1115,7 @@ print_graph_comment(struct trace_seq *s, struct trace_entry *ent,
|
||||
print_graph_prologue(iter, s, 0, 0, flags);
|
||||
|
||||
/* No time */
|
||||
print_graph_duration(0, s, flags | FLAGS_FILL_FULL);
|
||||
print_graph_duration(tr, 0, s, flags | FLAGS_FILL_FULL);
|
||||
|
||||
/* Indentation */
|
||||
if (depth > 0)
|
||||
@@ -1250,9 +1256,10 @@ static void print_lat_header(struct seq_file *s, u32 flags)
|
||||
seq_printf(s, "#%.*s||| / \n", size, spaces);
|
||||
}
|
||||
|
||||
static void __print_graph_headers_flags(struct seq_file *s, u32 flags)
|
||||
static void __print_graph_headers_flags(struct trace_array *tr,
|
||||
struct seq_file *s, u32 flags)
|
||||
{
|
||||
int lat = trace_flags & TRACE_ITER_LATENCY_FMT;
|
||||
int lat = tr->trace_flags & TRACE_ITER_LATENCY_FMT;
|
||||
|
||||
if (lat)
|
||||
print_lat_header(s, flags);
|
||||
@@ -1294,11 +1301,12 @@ static void print_graph_headers(struct seq_file *s)
|
||||
void print_graph_headers_flags(struct seq_file *s, u32 flags)
|
||||
{
|
||||
struct trace_iterator *iter = s->private;
|
||||
struct trace_array *tr = iter->tr;
|
||||
|
||||
if (!(trace_flags & TRACE_ITER_CONTEXT_INFO))
|
||||
if (!(tr->trace_flags & TRACE_ITER_CONTEXT_INFO))
|
||||
return;
|
||||
|
||||
if (trace_flags & TRACE_ITER_LATENCY_FMT) {
|
||||
if (tr->trace_flags & TRACE_ITER_LATENCY_FMT) {
|
||||
/* print nothing if the buffers are empty */
|
||||
if (trace_empty(iter))
|
||||
return;
|
||||
@@ -1306,7 +1314,7 @@ void print_graph_headers_flags(struct seq_file *s, u32 flags)
|
||||
print_trace_header(s, iter);
|
||||
}
|
||||
|
||||
__print_graph_headers_flags(s, flags);
|
||||
__print_graph_headers_flags(tr, s, flags);
|
||||
}
|
||||
|
||||
void graph_trace_open(struct trace_iterator *iter)
|
||||
|
Reference in New Issue
Block a user