• Adrian Hunter's avatar
    perf intel-pt: Fix improved sample timestamp · 61b6e08d
    Adrian Hunter authored
    The decoder uses its current timestamp in samples. Usually that is a
    timestamp that has already passed, but in some cases it is a timestamp
    for a branch that the decoder is walking towards, and consequently
    hasn't reached.
    
    The intel_pt_sample_time() function decides which is which, but was not
    handling TNT packets exactly correctly.
    
    In the case of TNT, the timestamp applies to the first branch, so the
    decoder must first walk to that branch.
    
    That means intel_pt_sample_time() should return true for TNT, and this
    patch makes that change. However, if the first branch is a non-taken
    branch (i.e. a 'N'), then intel_pt_sample_time() needs to return false
    for subsequent taken branches in the same TNT packet.
    
    To handle that, introduce a new state INTEL_PT_STATE_TNT_CONT to
    distinguish the cases.
    
    Note that commit 3f04d98e ("perf intel-pt: Improve sample
    timestamp") was also a stable fix and appears, for example, in v4.4
    stable tree as commit a4ebb58f ("perf intel-pt: Improve sample
    timestamp").
    Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org # v4.4+
    Fixes: 3f04d98e ("perf intel-pt: Improve sample timestamp")
    Link: http://lkml.kernel.org/r/20190510124143.27054-3-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    61b6e08d
intel-pt-decoder.c 67 KB