• Leo Yan's avatar
    perf cs-etm: Correct packets swapping in cs_etm__flush() · 43fd5666
    Leo Yan authored
    The structure cs_etm_queue uses 'prev_packet' to point to previous
    packet, this can be used to combine with new coming packet to generate
    samples.
    
    In function cs_etm__flush() it swaps packets only when the flag
    'etm->synth_opts.last_branch' is true, this means that it will not swap
    packets if without option '--itrace=il' to generate last branch entries;
    thus for this case the 'prev_packet' doesn't point to the correct
    previous packet and the stale packet still will be used to generate
    sequential sample.  Thus if dump trace with 'perf script' command we can
    see the incorrect flow with the stale packet's address info.
    
    This patch corrects packets swapping in cs_etm__flush(); except using
    the flag 'etm->synth_opts.last_branch' it also checks the another flag
    'etm->sample_branches', if any flag is true then it swaps packets so can
    save correct content to 'prev_packet'.  Finally this can fix the wrong
    program flow dumping issue.
    
    The patch has a minor refactoring to use 'etm->synth_opts.last_branch'
    instead of 'etmq->etm->synth_opts.last_branch' for condition checking,
    this is consistent with that is done in cs_etm__sample().
    Signed-off-by: default avatarLeo Yan <leo.yan@linaro.org>
    Reviewed-by: default avatarMathieu Poirier <mathieu.poirier@linaro.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Mike Leach <mike.leach@linaro.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Robert Walker <robert.walker@arm.com>
    Cc: coresight@lists.linaro.org
    Cc: linux-arm-kernel@lists.infradead.org
    Link: http://lkml.kernel.org/r/1544513908-16805-2-git-send-email-leo.yan@linaro.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    43fd5666
cs-etm.c 38 KB