perf trace: Avoid using raw_syscalls in duplicity with eBPF augmentation
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 0df50e0b0e0f315c0d5e2ce8556aafe1403b4a4b Gitweb: https://git.kernel.org/tip/0df50e0b0e0f315c0d5e2ce8556aafe1403b4a4b Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Wed, 12 Dec 2018 13:47:40 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Tue, 18 Dec 2018 12:23:57 -0300
perf trace: Avoid using raw_syscalls in duplicity with eBPF augmentation
So when we do something like:
# perf trace -e open*,augmented_raw_syscalls.o
We need to set trace->trace_syscalls because there is logic that use that when mixing strace-like output with other events, such as scheduler tracepoints, but with that set we ended up having multiple raw_syscalls:sys_{enter,exit} setup, which garbled the output, so check if trace->augmented_raw_syscalls is set and avoid the two extra tracepoints.
Cc Adrian Hunter <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Wang Nan <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-trace.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-)
tools/perf/builtin-trace.c +10 -6
@@ -2721,11 +2721,13 @@ static int trace__run(struct trace *trace, int argc, const char **argv) trace->live = true; -if (trace->trace_syscalls &&trace__add_syscall_newtp (trace)) - goto out_error_raw_syscalls; +if (!trace->raw_augmented_syscalls) { +if (trace->trace_syscalls &&trace__add_syscall_newtp (trace)) + goto out_error_raw_syscalls; -if (trace->trace_syscalls) - trace->vfs_getname =perf_evlist__add_vfs_getname (evlist); +if (trace->trace_syscalls) + trace->vfs_getname =perf_evlist__add_vfs_getname (evlist); + }if ((trace->trace_pgfaults &TRACE_PFMAJ )) { pgfault_maj =perf_evsel__new_pgfault (PERF_COUNT_SW_PAGE_FAULTS_MAJ );
@@ -2825,8 +2827,10 @@ static int trace__run(struct trace *trace, int argc, const char **argv)if (err <0 ) goto out_errno; -pr_debug ("event qualifier tracepoint filter: %s\n" , - trace->syscalls.events.sys_exit->filter); +if (trace->syscalls.events.sys_exit) { +pr_debug ("event qualifier tracepoint filter: %s\n" , + trace->syscalls.events.sys_exit->filter); + } } err =perf_evlist__apply_filters (evlist, &evsel);