diff options
Diffstat (limited to 'kernel/trace/trace_irqsoff.c')
| -rw-r--r-- | kernel/trace/trace_irqsoff.c | 54 | 
1 files changed, 16 insertions, 38 deletions
diff --git a/kernel/trace/trace_irqsoff.c b/kernel/trace/trace_irqsoff.c index 62a78d94353..b923d13e2fa 100644 --- a/kernel/trace/trace_irqsoff.c +++ b/kernel/trace/trace_irqsoff.c @@ -1,5 +1,5 @@  /* - * trace irqs off criticall timings + * trace irqs off critical timings   *   * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com>   * Copyright (C) 2008 Ingo Molnar <mingo@redhat.com> @@ -32,6 +32,8 @@ enum {  static int trace_type __read_mostly; +static int save_lat_flag; +  #ifdef CONFIG_PREEMPT_TRACER  static inline int  preempt_trace(void) @@ -95,7 +97,7 @@ irqsoff_tracer_call(unsigned long ip, unsigned long parent_ip)  	disabled = atomic_inc_return(&data->disabled);  	if (likely(disabled == 1)) -		trace_function(tr, data, ip, parent_ip, flags, preempt_count()); +		trace_function(tr, ip, parent_ip, flags, preempt_count());  	atomic_dec(&data->disabled);  } @@ -153,7 +155,7 @@ check_critical_timing(struct trace_array *tr,  	if (!report_latency(delta))  		goto out_unlock; -	trace_function(tr, data, CALLER_ADDR0, parent_ip, flags, pc); +	trace_function(tr, CALLER_ADDR0, parent_ip, flags, pc);  	latency = nsecs_to_usecs(delta); @@ -177,7 +179,7 @@ out:  	data->critical_sequence = max_sequence;  	data->preempt_timestamp = ftrace_now(cpu);  	tracing_reset(tr, cpu); -	trace_function(tr, data, CALLER_ADDR0, parent_ip, flags, pc); +	trace_function(tr, CALLER_ADDR0, parent_ip, flags, pc);  }  static inline void @@ -210,7 +212,7 @@ start_critical_timing(unsigned long ip, unsigned long parent_ip)  	local_save_flags(flags); -	trace_function(tr, data, ip, parent_ip, flags, preempt_count()); +	trace_function(tr, ip, parent_ip, flags, preempt_count());  	per_cpu(tracing_cpu, cpu) = 1; @@ -244,7 +246,7 @@ stop_critical_timing(unsigned long ip, unsigned long parent_ip)  	atomic_inc(&data->disabled);  	local_save_flags(flags); -	trace_function(tr, data, ip, parent_ip, flags, preempt_count()); +	trace_function(tr, ip, parent_ip, flags, preempt_count());  	check_critical_timing(tr, data, parent_ip ? : ip, cpu);  	data->critical_start = 0;  	atomic_dec(&data->disabled); @@ -353,33 +355,26 @@ void trace_preempt_off(unsigned long a0, unsigned long a1)  }  #endif /* CONFIG_PREEMPT_TRACER */ -/* - * save_tracer_enabled is used to save the state of the tracer_enabled - * variable when we disable it when we open a trace output file. - */ -static int save_tracer_enabled; -  static void start_irqsoff_tracer(struct trace_array *tr)  {  	register_ftrace_function(&trace_ops); -	if (tracing_is_enabled()) { +	if (tracing_is_enabled())  		tracer_enabled = 1; -		save_tracer_enabled = 1; -	} else { +	else  		tracer_enabled = 0; -		save_tracer_enabled = 0; -	}  }  static void stop_irqsoff_tracer(struct trace_array *tr)  {  	tracer_enabled = 0; -	save_tracer_enabled = 0;  	unregister_ftrace_function(&trace_ops);  }  static void __irqsoff_tracer_init(struct trace_array *tr)  { +	save_lat_flag = trace_flags & TRACE_ITER_LATENCY_FMT; +	trace_flags |= TRACE_ITER_LATENCY_FMT; +  	tracing_max_latency = 0;  	irqsoff_trace = tr;  	/* make sure that the tracer is visible */ @@ -390,30 +385,19 @@ static void __irqsoff_tracer_init(struct trace_array *tr)  static void irqsoff_tracer_reset(struct trace_array *tr)  {  	stop_irqsoff_tracer(tr); + +	if (!save_lat_flag) +		trace_flags &= ~TRACE_ITER_LATENCY_FMT;  }  static void irqsoff_tracer_start(struct trace_array *tr)  {  	tracer_enabled = 1; -	save_tracer_enabled = 1;  }  static void irqsoff_tracer_stop(struct trace_array *tr)  {  	tracer_enabled = 0; -	save_tracer_enabled = 0; -} - -static void irqsoff_tracer_open(struct trace_iterator *iter) -{ -	/* stop the trace while dumping */ -	tracer_enabled = 0; -} - -static void irqsoff_tracer_close(struct trace_iterator *iter) -{ -	/* restart tracing */ -	tracer_enabled = save_tracer_enabled;  }  #ifdef CONFIG_IRQSOFF_TRACER @@ -431,8 +415,6 @@ static struct tracer irqsoff_tracer __read_mostly =  	.reset		= irqsoff_tracer_reset,  	.start		= irqsoff_tracer_start,  	.stop		= irqsoff_tracer_stop, -	.open		= irqsoff_tracer_open, -	.close		= irqsoff_tracer_close,  	.print_max	= 1,  #ifdef CONFIG_FTRACE_SELFTEST  	.selftest    = trace_selftest_startup_irqsoff, @@ -459,8 +441,6 @@ static struct tracer preemptoff_tracer __read_mostly =  	.reset		= irqsoff_tracer_reset,  	.start		= irqsoff_tracer_start,  	.stop		= irqsoff_tracer_stop, -	.open		= irqsoff_tracer_open, -	.close		= irqsoff_tracer_close,  	.print_max	= 1,  #ifdef CONFIG_FTRACE_SELFTEST  	.selftest    = trace_selftest_startup_preemptoff, @@ -489,8 +469,6 @@ static struct tracer preemptirqsoff_tracer __read_mostly =  	.reset		= irqsoff_tracer_reset,  	.start		= irqsoff_tracer_start,  	.stop		= irqsoff_tracer_stop, -	.open		= irqsoff_tracer_open, -	.close		= irqsoff_tracer_close,  	.print_max	= 1,  #ifdef CONFIG_FTRACE_SELFTEST  	.selftest    = trace_selftest_startup_preemptirqsoff,  |