lkml.org 
[lkml]   [2021]   [May]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 514/530] perf session: Add swap operation for event TIME_CONV
    Date
    From: Leo Yan <leo.yan@linaro.org>

    [ Upstream commit 050ffc449008eeeafc187dec337d9cf1518f89bc ]

    Since commit d110162cafc8 ("perf tsc: Support cap_user_time_short for
    event TIME_CONV"), the event PERF_RECORD_TIME_CONV has extended the data
    structure for clock parameters.

    To be backwards-compatible, this patch adds a dedicated swap operation
    for the event PERF_RECORD_TIME_CONV, based on checking if the event
    contains field "time_cycles", it can support both for the old and new
    event formats.

    Fixes: d110162cafc8 ("perf tsc: Support cap_user_time_short for event TIME_CONV")
    Signed-off-by: Leo Yan <leo.yan@linaro.org>
    Acked-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Gustavo A. R. Silva <gustavoars@kernel.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Kan Liang <kan.liang@linux.intel.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Steve MacLean <Steve.MacLean@Microsoft.com>
    Cc: Yonatan Goldschmidt <yonatan.goldschmidt@granulate.io>
    Link: https://lore.kernel.org/r/20210428120915.7123-4-leo.yan@linaro.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/perf/util/session.c | 15 ++++++++++++++-
    1 file changed, 14 insertions(+), 1 deletion(-)

    diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c
    index 22098fffac4f..63b619084b34 100644
    --- a/tools/perf/util/session.c
    +++ b/tools/perf/util/session.c
    @@ -945,6 +945,19 @@ static void perf_event__stat_round_swap(union perf_event *event,
    event->stat_round.time = bswap_64(event->stat_round.time);
    }

    +static void perf_event__time_conv_swap(union perf_event *event,
    + bool sample_id_all __maybe_unused)
    +{
    + event->time_conv.time_shift = bswap_64(event->time_conv.time_shift);
    + event->time_conv.time_mult = bswap_64(event->time_conv.time_mult);
    + event->time_conv.time_zero = bswap_64(event->time_conv.time_zero);
    +
    + if (event_contains(event->time_conv, time_cycles)) {
    + event->time_conv.time_cycles = bswap_64(event->time_conv.time_cycles);
    + event->time_conv.time_mask = bswap_64(event->time_conv.time_mask);
    + }
    +}
    +
    typedef void (*perf_event__swap_op)(union perf_event *event,
    bool sample_id_all);

    @@ -981,7 +994,7 @@ static perf_event__swap_op perf_event__swap_ops[] = {
    [PERF_RECORD_STAT] = perf_event__stat_swap,
    [PERF_RECORD_STAT_ROUND] = perf_event__stat_round_swap,
    [PERF_RECORD_EVENT_UPDATE] = perf_event__event_update_swap,
    - [PERF_RECORD_TIME_CONV] = perf_event__all64_swap,
    + [PERF_RECORD_TIME_CONV] = perf_event__time_conv_swap,
    [PERF_RECORD_HEADER_MAX] = NULL,
    };

    --
    2.30.2


    \
     
     \ /
      Last update: 2021-05-12 19:01    [W:2.279 / U:0.204 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site