From: Arnaldo Carvalho de Melo <a...@redhat.com>

We were doing this only at the sys_exit syscall tracepoint, as for
strace-like we count the pair of sys_enter and sys_exit as one event,
but when asking specifically for a the syscalls:sys_enter_NAME
tracepoint we need to count each of those as an event.

I.e. things like:

  # perf trace --max-events=4 -e syscalls:sys_enter_lseek
     0.000 pool/2242 syscalls:sys_enter_lseek(fd: 14<anon_inode:[timerfd]>, 
offset: 0, whence: CUR)
     0.034 pool/2242 syscalls:sys_enter_lseek(fd: 15<anon_inode:[timerfd]>, 
offset: 0, whence: CUR)
     0.051 pool/2242 syscalls:sys_enter_lseek(fd: 16<anon_inode:[timerfd]>, 
offset: 0, whence: CUR)
  2307.900 sshd/30800 syscalls:sys_enter_lseek(fd: 
3</usr/lib64/libsystemd.so.0.25.0>, offset: 9032, whence: SET)
  #

Were going on forever, since we only had sys_enter events.

Cc: Adrian Hunter <adrian.hun...@intel.com>
Cc: David Ahern <dsah...@gmail.com>
Cc: Jiri Olsa <jo...@kernel.org>
Cc: Luis Cláudio Gonçalves <lclau...@redhat.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Link: https://lkml.kernel.org/n/tip-0ob1dky1a9ijlfrfhxyl4...@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/builtin-trace.c | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index 0294b17ed510..1aaf7b28eec4 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2727,12 +2727,6 @@ static int trace__event_handler(struct trace *trace, 
struct evsel *evsel,
                        } else {
                                trace__fprintf_tp_fields(trace, evsel, sample, 
thread, NULL, 0);
                        }
-                       ++trace->nr_events_printed;
-
-                       if (evsel->max_events != ULONG_MAX && 
++evsel->nr_events_printed == evsel->max_events) {
-                               evsel__disable(evsel);
-                               evsel__close(evsel);
-                       }
                }
        }
 
@@ -2743,6 +2737,13 @@ static int trace__event_handler(struct trace *trace, 
struct evsel *evsel,
                trace__fprintf_callchain(trace, sample);
        else if (callchain_ret < 0)
                pr_err("Problem processing %s callchain, skipping...\n", 
perf_evsel__name(evsel));
+
+       ++trace->nr_events_printed;
+
+       if (evsel->max_events != ULONG_MAX && ++evsel->nr_events_printed == 
evsel->max_events) {
+               evsel__disable(evsel);
+               evsel__close(evsel);
+       }
 out:
        thread__put(thread);
        return 0;
-- 
2.21.0

Reply via email to