perf trace: Enable events when doing system wide tracing and starting a workload
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: cb24d01d217497fb32467de22d773655f47d3896 Gitweb: http://git.kernel.org/tip/cb24d01d217497fb32467de22d773655f47d3896 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Wed, 22 Apr 2015 10:04:23 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Thu, 23 Apr 2015 17:07:59 -0300
perf trace: Enable events when doing system wide tracing and starting a workload
commit f7aa222ff397
Author: Arnaldo Carvalho de Melo <[email protected]>
Date: Tue Feb 3 13:25:39 2015 -0300
perf trace: No need to enable evsels for workload started from perf
The assumption was that whenever a workload is specified, the attr.enable_on_exec evsel flag would be set, but that is not happening when perf_record_opts.system_wide is set, for instance
That resulted in both perf_evlist__enable() and attr.enable_on_exec being not called/set, which made the events to remain disabled while the workload runs, producing no output.
Fix it, by calling perf_evlist__enable() in the 'trace' tool when forking and not targetting a workload started from trace
v2: Test against !target__none(), as suggested by Namhyung Kim, that is what is used in perf_evsel__config() when deciding if the attr.enable_on_exec flag to be set. More work is needed to cover other cases such as opts->initial_delay.
--- tools/perf/builtin-trace.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
tools/perf/builtin-trace.c +3 -2
@@ -2241,10 +2241,11 @@ static int trace__run(struct trace *trace, int argc, const char **argv)if (err <0 ) goto out_error_mmap; +if (!target__none (&trace->opts.target)) +perf_evlist__enable (evlist); +if (forks)perf_evlist__start_workload (evlist); -else -perf_evlist__enable (evlist); trace->multiple_threads = evlist->threads->map[0 ] ==-1 || evlist->threads->nr > 1 ||