• Adrian Hunter's avatar
    perf tools: Fix use of wrong event when processing exit events · 53ff6bc3
    Adrian Hunter authored
    In a couple of cases the 'comm' member of 'union event' has been used
    instead of the correct member ('fork') when processing exit events.
    
    In the cases where it has been used incorrectly, only the 'pid' and
    'tid' are affected.  The 'pid' value would be correct anyway because it
    is in the same position in 'comm' and 'fork' events, but the 'tid' would
    have been incorrectly assigned from 'ppid'.
    
    However, for exit events, the kernel puts the current task in the 'ppid'
    and 'ttid' which is the same as the exiting task.  That is 'ppid' ==
    'pid' and if the task is not multi-threaded, 'pid' == 'tid' i.e. the
    data goes wrong only when tracing multi-threaded programs.
    
    It is hard to find an example of how this would produce an error in
    practice.  There are 3 occurences of the fix:
    
    1. perf script is only affected if !sample_id_all which only happens on
      old kernels.
    
    2. intel_pt is only affected when decoding without timestamps
       and would probably still decode correctly - the exit event is
       only used to flush out data which anyway gets flushed at the
       end of the session
    
    3. intel_bts also uses the exit event to flush data which
       would probably not cause errors as it would get flushed at
       the end of the session instead
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Link: http://lkml.kernel.org/r/1439888825-27708-1-git-send-email-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    53ff6bc3
intel-bts.c 22.2 KB