lkml.org 
[lkml]   [2016]   [Sep]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.7 017/143] perf intel-pt: Fix occasional decoding errors when tracing system-wide
    Date
    4.7-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Adrian Hunter <adrian.hunter@intel.com>

    commit 3d918fb13abdbeca7947578f5d7e426eafad7f5e upstream.

    In order to successfully decode Intel PT traces, context switch events
    are needed from the moment the trace starts. Currently that is ensured
    by using the 'immediate' flag which enables the switch event when it is
    opened.

    However, since commit 86c2786994bd ("perf intel-pt: Add support for
    PERF_RECORD_SWITCH") that might not always happen. When tracing
    system-wide the context switch event is added to the tracking event
    which was not set as 'immediate'. Change that so it is.

    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Fixes: 86c2786994bd ("perf intel-pt: Add support for PERF_RECORD_SWITCH")
    Link: http://lkml.kernel.org/r/1471245784-22580-1-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    tools/perf/arch/x86/util/intel-pt.c | 6 +++++-
    1 file changed, 5 insertions(+), 1 deletion(-)

    --- a/tools/perf/arch/x86/util/intel-pt.c
    +++ b/tools/perf/arch/x86/util/intel-pt.c
    @@ -501,7 +501,7 @@ static int intel_pt_recording_options(st
    struct intel_pt_recording *ptr =
    container_of(itr, struct intel_pt_recording, itr);
    struct perf_pmu *intel_pt_pmu = ptr->intel_pt_pmu;
    - bool have_timing_info;
    + bool have_timing_info, need_immediate = false;
    struct perf_evsel *evsel, *intel_pt_evsel = NULL;
    const struct cpu_map *cpus = evlist->cpus;
    bool privileged = geteuid() == 0 || perf_event_paranoid() < 0;
    @@ -655,6 +655,7 @@ static int intel_pt_recording_options(st
    ptr->have_sched_switch = 3;
    } else {
    opts->record_switch_events = true;
    + need_immediate = true;
    if (cpu_wide)
    ptr->have_sched_switch = 3;
    else
    @@ -700,6 +701,9 @@ static int intel_pt_recording_options(st
    tracking_evsel->attr.freq = 0;
    tracking_evsel->attr.sample_period = 1;

    + if (need_immediate)
    + tracking_evsel->immediate = true;
    +
    /* In per-cpu case, always need the time of mmap events etc */
    if (!cpu_map__empty(cpus)) {
    perf_evsel__set_sample_bit(tracking_evsel, TIME);

    \
     
     \ /
      Last update: 2016-09-17 09:58    [W:11.143 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site