• Arnaldo Carvalho de Melo's avatar
    perf trace: Handle unpaired raw_syscalls:sys_exit event · fd2b2975
    Arnaldo Carvalho de Melo authored
    Which may happen when we start a tracing session and a thread is waiting
    for something like "poll" to return, in which case we better print "?"
    both for the syscall entry timestamp and for the duration.
    
    E.g.:
    
    Tracing existing mutt session:
    
      # perf trace -p `pidof mutt`
              ? (     ?   ): mutt/17135  ... [continued]: poll()) = 1
          0.027 ( 0.013 ms): mutt/17135 read(buf: 0x7ffcb3c42cef, count: 1) = 1
          0.047 ( 0.008 ms): mutt/17135 poll(ufds: 0x7ffcb3c42c50, nfds: 1, timeout_msecs: 1000) = 1
          0.059 ( 0.008 ms): mutt/17135 read(buf: 0x7ffcb3c42cef, count: 1) = 1
      <SNIP>
    
    Before it would print a large number because we'd do:
    
      ttrace->entry_time - trace->base_time
    
    And entry_time would be 0, while base_time would be the timestamp for
    the first event 'perf trace' reads, oops.
    
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Luis Claudio Gonçalves <lclaudio@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/n/tip-wbcb93ofva2qdjd5ltn5eeqq@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    fd2b2975
builtin-trace.c 85.5 KB