diff options
| author | 2010-09-09 20:40:06 +0200 | |
|---|---|---|
| committer | 2010-09-09 20:40:08 +0200 | |
| commit | 2aa61274efb9f532deaebc9812675a27af1994cb (patch) | |
| tree | c2f70525dc152e0ddce60f1a3021473cc6a3f298 /kernel/trace/ftrace.c | |
| parent | perf: Add a script to show packets processing (diff) | |
| parent | perf: Fix CPU hotplug (diff) | |
| download | wireguard-linux-2aa61274efb9f532deaebc9812675a27af1994cb.tar.xz wireguard-linux-2aa61274efb9f532deaebc9812675a27af1994cb.zip | |
Merge branch 'perf/urgent' into perf/core
Merge reason: Pick up pending fixes before applying dependent new changes.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'kernel/trace/ftrace.c')
| -rw-r--r-- | kernel/trace/ftrace.c | 17 | 
1 files changed, 12 insertions, 5 deletions
| diff --git a/kernel/trace/ftrace.c b/kernel/trace/ftrace.c index 0d88ce9b9fb8..83a16e9ee518 100644 --- a/kernel/trace/ftrace.c +++ b/kernel/trace/ftrace.c @@ -381,12 +381,19 @@ static int function_stat_show(struct seq_file *m, void *v)  {  	struct ftrace_profile *rec = v;  	char str[KSYM_SYMBOL_LEN]; +	int ret = 0;  #ifdef CONFIG_FUNCTION_GRAPH_TRACER -	static DEFINE_MUTEX(mutex);  	static struct trace_seq s;  	unsigned long long avg;  	unsigned long long stddev;  #endif +	mutex_lock(&ftrace_profile_lock); + +	/* we raced with function_profile_reset() */ +	if (unlikely(rec->counter == 0)) { +		ret = -EBUSY; +		goto out; +	}  	kallsyms_lookup(rec->ip, NULL, NULL, NULL, str);  	seq_printf(m, "  %-30.30s  %10lu", str, rec->counter); @@ -408,7 +415,6 @@ static int function_stat_show(struct seq_file *m, void *v)  		do_div(stddev, (rec->counter - 1) * 1000);  	} -	mutex_lock(&mutex);  	trace_seq_init(&s);  	trace_print_graph_duration(rec->time, &s);  	trace_seq_puts(&s, "    "); @@ -416,11 +422,12 @@ static int function_stat_show(struct seq_file *m, void *v)  	trace_seq_puts(&s, "    ");  	trace_print_graph_duration(stddev, &s);  	trace_print_seq(m, &s); -	mutex_unlock(&mutex);  #endif  	seq_putc(m, '\n'); +out: +	mutex_unlock(&ftrace_profile_lock); -	return 0; +	return ret;  }  static void ftrace_profile_reset(struct ftrace_profile_stat *stat) @@ -2409,7 +2416,7 @@ static const struct file_operations ftrace_filter_fops = {  	.open = ftrace_filter_open,  	.read = seq_read,  	.write = ftrace_filter_write, -	.llseek = ftrace_regex_lseek, +	.llseek = no_llseek,  	.release = ftrace_filter_release,  }; | 
