|
@@ -32,7 +32,7 @@ enum {
|
|
|
|
|
|
static int trace_type __read_mostly;
|
|
static int trace_type __read_mostly;
|
|
|
|
|
|
-static int save_lat_flag;
|
|
|
|
|
|
+static int save_flags;
|
|
|
|
|
|
static void stop_irqsoff_tracer(struct trace_array *tr, int graph);
|
|
static void stop_irqsoff_tracer(struct trace_array *tr, int graph);
|
|
static int start_irqsoff_tracer(struct trace_array *tr, int graph);
|
|
static int start_irqsoff_tracer(struct trace_array *tr, int graph);
|
|
@@ -558,8 +558,11 @@ static void stop_irqsoff_tracer(struct trace_array *tr, int graph)
|
|
|
|
|
|
static void __irqsoff_tracer_init(struct trace_array *tr)
|
|
static void __irqsoff_tracer_init(struct trace_array *tr)
|
|
{
|
|
{
|
|
- save_lat_flag = trace_flags & TRACE_ITER_LATENCY_FMT;
|
|
|
|
- trace_flags |= TRACE_ITER_LATENCY_FMT;
|
|
|
|
|
|
+ save_flags = trace_flags;
|
|
|
|
+
|
|
|
|
+ /* non overwrite screws up the latency tracers */
|
|
|
|
+ set_tracer_flag(TRACE_ITER_OVERWRITE, 1);
|
|
|
|
+ set_tracer_flag(TRACE_ITER_LATENCY_FMT, 1);
|
|
|
|
|
|
tracing_max_latency = 0;
|
|
tracing_max_latency = 0;
|
|
irqsoff_trace = tr;
|
|
irqsoff_trace = tr;
|
|
@@ -573,10 +576,13 @@ static void __irqsoff_tracer_init(struct trace_array *tr)
|
|
|
|
|
|
static void irqsoff_tracer_reset(struct trace_array *tr)
|
|
static void irqsoff_tracer_reset(struct trace_array *tr)
|
|
{
|
|
{
|
|
|
|
+ int lat_flag = save_flags & TRACE_ITER_LATENCY_FMT;
|
|
|
|
+ int overwrite_flag = save_flags & TRACE_ITER_OVERWRITE;
|
|
|
|
+
|
|
stop_irqsoff_tracer(tr, is_graph());
|
|
stop_irqsoff_tracer(tr, is_graph());
|
|
|
|
|
|
- if (!save_lat_flag)
|
|
|
|
- trace_flags &= ~TRACE_ITER_LATENCY_FMT;
|
|
|
|
|
|
+ set_tracer_flag(TRACE_ITER_LATENCY_FMT, lat_flag);
|
|
|
|
+ set_tracer_flag(TRACE_ITER_OVERWRITE, overwrite_flag);
|
|
}
|
|
}
|
|
|
|
|
|
static void irqsoff_tracer_start(struct trace_array *tr)
|
|
static void irqsoff_tracer_start(struct trace_array *tr)
|
|
@@ -609,6 +615,7 @@ static struct tracer irqsoff_tracer __read_mostly =
|
|
.print_line = irqsoff_print_line,
|
|
.print_line = irqsoff_print_line,
|
|
.flags = &tracer_flags,
|
|
.flags = &tracer_flags,
|
|
.set_flag = irqsoff_set_flag,
|
|
.set_flag = irqsoff_set_flag,
|
|
|
|
+ .flag_changed = trace_keep_overwrite,
|
|
#ifdef CONFIG_FTRACE_SELFTEST
|
|
#ifdef CONFIG_FTRACE_SELFTEST
|
|
.selftest = trace_selftest_startup_irqsoff,
|
|
.selftest = trace_selftest_startup_irqsoff,
|
|
#endif
|
|
#endif
|
|
@@ -642,6 +649,7 @@ static struct tracer preemptoff_tracer __read_mostly =
|
|
.print_line = irqsoff_print_line,
|
|
.print_line = irqsoff_print_line,
|
|
.flags = &tracer_flags,
|
|
.flags = &tracer_flags,
|
|
.set_flag = irqsoff_set_flag,
|
|
.set_flag = irqsoff_set_flag,
|
|
|
|
+ .flag_changed = trace_keep_overwrite,
|
|
#ifdef CONFIG_FTRACE_SELFTEST
|
|
#ifdef CONFIG_FTRACE_SELFTEST
|
|
.selftest = trace_selftest_startup_preemptoff,
|
|
.selftest = trace_selftest_startup_preemptoff,
|
|
#endif
|
|
#endif
|
|
@@ -677,6 +685,7 @@ static struct tracer preemptirqsoff_tracer __read_mostly =
|
|
.print_line = irqsoff_print_line,
|
|
.print_line = irqsoff_print_line,
|
|
.flags = &tracer_flags,
|
|
.flags = &tracer_flags,
|
|
.set_flag = irqsoff_set_flag,
|
|
.set_flag = irqsoff_set_flag,
|
|
|
|
+ .flag_changed = trace_keep_overwrite,
|
|
#ifdef CONFIG_FTRACE_SELFTEST
|
|
#ifdef CONFIG_FTRACE_SELFTEST
|
|
.selftest = trace_selftest_startup_preemptirqsoff,
|
|
.selftest = trace_selftest_startup_preemptirqsoff,
|
|
#endif
|
|
#endif
|