• Leo Yan's avatar
    perf cs-etm: Correct packets swapping in cs_etm__flush() · d6404de9
    Leo Yan authored
    [ Upstream commit 43fd5666 ]
    
    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>
    Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
    d6404de9
Name
Last commit
Last update
Documentation Loading commit data...
LICENSES Loading commit data...
arch Loading commit data...
block Loading commit data...
certs Loading commit data...
crypto Loading commit data...
drivers Loading commit data...
firmware Loading commit data...
fs Loading commit data...
include Loading commit data...
init Loading commit data...
ipc Loading commit data...
kernel Loading commit data...
lib Loading commit data...
mm Loading commit data...
net Loading commit data...
samples Loading commit data...
scripts Loading commit data...
security Loading commit data...
sound Loading commit data...
tools Loading commit data...
usr Loading commit data...
virt Loading commit data...
.clang-format Loading commit data...
.cocciconfig Loading commit data...
.get_maintainer.ignore Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.mailmap Loading commit data...
COPYING Loading commit data...
CREDITS Loading commit data...
Kbuild Loading commit data...
Kconfig Loading commit data...
MAINTAINERS Loading commit data...
Makefile Loading commit data...
README Loading commit data...