Commit 41bc8144d02028133bcd1d545023c6f49e8b2411
Committed by
Thomas Gleixner
1 parent
41c52c0db9
Exists in
master
and in
7 other branches
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 |