diff options
Diffstat (limited to 'kernel/trace/trace_sysprof.c')
-rw-r--r-- | kernel/trace/trace_sysprof.c | 32 |
1 files changed, 5 insertions, 27 deletions
diff --git a/kernel/trace/trace_sysprof.c b/kernel/trace/trace_sysprof.c index db58fb66a135..a5779bd975db 100644 --- a/kernel/trace/trace_sysprof.c +++ b/kernel/trace/trace_sysprof.c | |||
@@ -202,7 +202,6 @@ static void start_stack_timer(int cpu) | |||
202 | 202 | ||
203 | hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); | 203 | hrtimer_init(hrtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); |
204 | hrtimer->function = stack_trace_timer_fn; | 204 | hrtimer->function = stack_trace_timer_fn; |
205 | hrtimer->cb_mode = HRTIMER_CB_IRQSAFE_PERCPU; | ||
206 | 205 | ||
207 | hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL); | 206 | hrtimer_start(hrtimer, ns_to_ktime(sample_period), HRTIMER_MODE_REL); |
208 | } | 207 | } |
@@ -234,20 +233,10 @@ static void stop_stack_timers(void) | |||
234 | stop_stack_timer(cpu); | 233 | stop_stack_timer(cpu); |
235 | } | 234 | } |
236 | 235 | ||
237 | static void stack_reset(struct trace_array *tr) | ||
238 | { | ||
239 | int cpu; | ||
240 | |||
241 | tr->time_start = ftrace_now(tr->cpu); | ||
242 | |||
243 | for_each_online_cpu(cpu) | ||
244 | tracing_reset(tr->data[cpu]); | ||
245 | } | ||
246 | |||
247 | static void start_stack_trace(struct trace_array *tr) | 236 | static void start_stack_trace(struct trace_array *tr) |
248 | { | 237 | { |
249 | mutex_lock(&sample_timer_lock); | 238 | mutex_lock(&sample_timer_lock); |
250 | stack_reset(tr); | 239 | tracing_reset_online_cpus(tr); |
251 | start_stack_timers(); | 240 | start_stack_timers(); |
252 | tracer_enabled = 1; | 241 | tracer_enabled = 1; |
253 | mutex_unlock(&sample_timer_lock); | 242 | mutex_unlock(&sample_timer_lock); |
@@ -261,27 +250,17 @@ static void stop_stack_trace(struct trace_array *tr) | |||
261 | mutex_unlock(&sample_timer_lock); | 250 | mutex_unlock(&sample_timer_lock); |
262 | } | 251 | } |
263 | 252 | ||
264 | static void stack_trace_init(struct trace_array *tr) | 253 | static int stack_trace_init(struct trace_array *tr) |
265 | { | 254 | { |
266 | sysprof_trace = tr; | 255 | sysprof_trace = tr; |
267 | 256 | ||
268 | if (tr->ctrl) | 257 | start_stack_trace(tr); |
269 | start_stack_trace(tr); | 258 | return 0; |
270 | } | 259 | } |
271 | 260 | ||
272 | static void stack_trace_reset(struct trace_array *tr) | 261 | static void stack_trace_reset(struct trace_array *tr) |
273 | { | 262 | { |
274 | if (tr->ctrl) | 263 | stop_stack_trace(tr); |
275 | stop_stack_trace(tr); | ||
276 | } | ||
277 | |||
278 | static void stack_trace_ctrl_update(struct trace_array *tr) | ||
279 | { | ||
280 | /* When starting a new trace, reset the buffers */ | ||
281 | if (tr->ctrl) | ||
282 | start_stack_trace(tr); | ||
283 | else | ||
284 | stop_stack_trace(tr); | ||
285 | } | 264 | } |
286 | 265 | ||
287 | static struct tracer stack_trace __read_mostly = | 266 | static struct tracer stack_trace __read_mostly = |
@@ -289,7 +268,6 @@ static struct tracer stack_trace __read_mostly = | |||
289 | .name = "sysprof", | 268 | .name = "sysprof", |
290 | .init = stack_trace_init, | 269 | .init = stack_trace_init, |
291 | .reset = stack_trace_reset, | 270 | .reset = stack_trace_reset, |
292 | .ctrl_update = stack_trace_ctrl_update, | ||
293 | #ifdef CONFIG_FTRACE_SELFTEST | 271 | #ifdef CONFIG_FTRACE_SELFTEST |
294 | .selftest = trace_selftest_startup_sysprof, | 272 | .selftest = trace_selftest_startup_sysprof, |
295 | #endif | 273 | #endif |