Commit 41bc8144d02028133bcd1d545023c6f49e8b2411

Authored by Steven Rostedt
Committed by Thomas Gleixner
1 parent 41c52c0db9

ftrace: fix up cmdline recording

The new work with converting the trace hooks over to markers broke the
command line recording of ftrace. This patch fixes it again.

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

Showing 4 changed files with 19 additions and 13 deletions Side-by-side Diff

kernel/trace/trace.c
... ... @@ -652,9 +652,6 @@
652 652 static int cmdline_idx;
653 653 static DEFINE_SPINLOCK(trace_cmdline_lock);
654 654  
655   -/* trace in all context switches */
656   -atomic_t trace_record_cmdline_enabled __read_mostly;
657   -
658 655 /* temporary disable recording */
659 656 atomic_t trace_record_cmdline_disabled __read_mostly;
660 657  
kernel/trace/trace.h
... ... @@ -218,6 +218,8 @@
218 218  
219 219 void tracing_start_function_trace(void);
220 220 void tracing_stop_function_trace(void);
  221 +void tracing_start_cmdline_record(void);
  222 +void tracing_stop_cmdline_record(void);
221 223 int register_tracer(struct tracer *type);
222 224 void unregister_tracer(struct tracer *type);
223 225  
... ... @@ -225,8 +227,6 @@
225 227  
226 228 extern unsigned long tracing_max_latency;
227 229 extern unsigned long tracing_thresh;
228   -
229   -extern atomic_t trace_record_cmdline_enabled;
230 230  
231 231 void update_max_tr(struct trace_array *tr, struct task_struct *tsk, int cpu);
232 232 void update_max_tr_single(struct trace_array *tr,
kernel/trace/trace_functions.c
... ... @@ -29,14 +29,14 @@
29 29 static void start_function_trace(struct trace_array *tr)
30 30 {
31 31 function_reset(tr);
32   - atomic_inc(&trace_record_cmdline_enabled);
  32 + tracing_start_cmdline_record();
33 33 tracing_start_function_trace();
34 34 }
35 35  
36 36 static void stop_function_trace(struct trace_array *tr)
37 37 {
38 38 tracing_stop_function_trace();
39   - atomic_dec(&trace_record_cmdline_enabled);
  39 + tracing_stop_cmdline_record();
40 40 }
41 41  
42 42 static void function_trace_init(struct trace_array *tr)
kernel/trace/trace_sched_switch.c
... ... @@ -29,6 +29,9 @@
29 29 long disabled;
30 30 int cpu;
31 31  
  32 + tracing_record_cmdline(prev);
  33 + tracing_record_cmdline(next);
  34 +
32 35 if (!tracer_enabled)
33 36 return;
34 37  
... ... @@ -63,8 +66,6 @@
63 66 prev = va_arg(*args, typeof(prev));
64 67 next = va_arg(*args, typeof(next));
65 68  
66   - tracing_record_cmdline(prev);
67   -
68 69 /*
69 70 * If tracer_switch_func only points to the local
70 71 * switch func, it still needs the ptr passed to it.
71 72  
72 73  
73 74  
... ... @@ -213,18 +214,26 @@
213 214 tracing_sched_unregister();
214 215 }
215 216  
  217 +void tracing_start_cmdline_record(void)
  218 +{
  219 + tracing_start_sched_switch();
  220 +}
  221 +
  222 +void tracing_stop_cmdline_record(void)
  223 +{
  224 + tracing_stop_sched_switch();
  225 +}
  226 +
216 227 static void start_sched_trace(struct trace_array *tr)
217 228 {
218 229 sched_switch_reset(tr);
219   - atomic_inc(&trace_record_cmdline_enabled);
220 230 tracer_enabled = 1;
221   - tracing_start_sched_switch();
  231 + tracing_start_cmdline_record();
222 232 }
223 233  
224 234 static void stop_sched_trace(struct trace_array *tr)
225 235 {
226   - tracing_stop_sched_switch();
227   - atomic_dec(&trace_record_cmdline_enabled);
  236 + tracing_stop_cmdline_record();
228 237 tracer_enabled = 0;
229 238 }
230 239