lkml.org 
[lkml]   [2022]   [Apr]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH] perf report: Set PERF_SAMPLE_DATA_SRC bit for Arm SPE event
    From
    Date
    Hi Leo,

    On 13/04/2022 08:51, Leo Yan wrote:
    > Since commit bb30acae4c4d ("perf report: Bail out --mem-mode if mem info
    > is not available") "perf mem report" and "perf report --mem-mode"
    > don't report result if the PERF_SAMPLE_DATA_SRC bit is missed in sample
    > type.
    >
    > The commit ffab48705205 ("perf: arm-spe: Fix perf report --mem-mode")
    > partially fixes the issue. It adds PERF_SAMPLE_DATA_SRC bit for Arm SPE
    > event, this allows the perf data file generated by kernel v5.18-rc1 or
    > later version can be reported properly.
    >
    > On the other hand, perf tool still fails to be backward compatibility
    > for a data file recorded by an older version's perf which contains Arm
    > SPE trace data. This patch is a workaround in reporting phase, when
    > detects ARM SPE PMU event and without PERF_SAMPLE_DATA_SRC bit, it will
    > force to set the bit in the sample type and give a warning info.
    >
    > Fixes: bb30acae4c4d ("perf report: Bail out --mem-mode if mem info is not available")
    > Signed-off-by: Leo Yan <leo.yan@linaro.org>
    > ---
    > tools/perf/builtin-report.c | 16 ++++++++++++++++
    > 1 file changed, 16 insertions(+)
    >
    > diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
    > index 1ad75c7ba074..f26dd14eb852 100644
    > --- a/tools/perf/builtin-report.c
    > +++ b/tools/perf/builtin-report.c
    > @@ -353,6 +353,7 @@ static int report__setup_sample_type(struct report *rep)
    > struct perf_session *session = rep->session;
    > u64 sample_type = evlist__combined_sample_type(session->evlist);
    > bool is_pipe = perf_data__is_pipe(session->data);
    > + struct evsel *evsel;
    >
    > if (session->itrace_synth_opts->callchain ||
    > session->itrace_synth_opts->add_callchain ||
    > @@ -407,6 +408,21 @@ static int report__setup_sample_type(struct report *rep)
    > }
    >
    > if (sort__mode == SORT_MODE__MEMORY) {
    > + /*
    > + * FIXUP: prior to kernel 5.18, Arm SPE missed to set
    > + * PERF_SAMPLE_DATA_SRC bit in sample type. For backward
    > + * compatibility, set the bit if it's an old perf data file.
    > + */
    > + evlist__for_each_entry(session->evlist, evsel) {
    > + if (strstr(evsel->name, "arm_spe_") &&

    This didn't work for me when the file recorded "-e arm_spe//" instead of
    "-e arm_spe_0//". Could you remove the trailing _? With that:

    Tested-by: German Gomez <german.gomez@arm.com>

    > + !(sample_type & PERF_SAMPLE_DATA_SRC)) {
    > + ui__warning("PERF_SAMPLE_DATA_SRC bit is not set "
    > + "for Arm SPE event.\n");
    > + evsel->core.attr.sample_type |= PERF_SAMPLE_DATA_SRC;
    > + sample_type |= PERF_SAMPLE_DATA_SRC;
    > + }
    > + }
    > +
    > if (!is_pipe && !(sample_type & PERF_SAMPLE_DATA_SRC)) {
    > ui__error("Selected --mem-mode but no mem data. "
    > "Did you call perf record without -d?\n");

    \
     
     \ /
      Last update: 2022-04-13 10:17    [W:7.778 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site