lkml.org 
[lkml]   [2020]   [Nov]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 18/25] perf tools: Use machine__for_each_dso in perf_session__cache_build_ids
    Date
    Using machine__for_each_dso in perf_session__cache_build_ids,
    so we can reuse perf_session__cache_build_ids with different
    callback in following changes.

    Signed-off-by: Jiri Olsa <jolsa@kernel.org>
    ---
    tools/perf/util/build-id.c | 41 +++++++++++++++-----------------------
    1 file changed, 16 insertions(+), 25 deletions(-)

    diff --git a/tools/perf/util/build-id.c b/tools/perf/util/build-id.c
    index 1fd58703c2d4..948a7f48d668 100644
    --- a/tools/perf/util/build-id.c
    +++ b/tools/perf/util/build-id.c
    @@ -859,12 +859,16 @@ int build_id_cache__remove_s(const char *sbuild_id)
    return err;
    }

    -static int dso__cache_build_id(struct dso *dso, struct machine *machine)
    +static int dso__cache_build_id(struct dso *dso, struct machine *machine,
    + void *priv __maybe_unused)
    {
    bool is_kallsyms = dso__is_kallsyms(dso);
    bool is_vdso = dso__is_vdso(dso);
    const char *name = dso->long_name;

    + if (!dso->has_build_id)
    + return 0;
    +
    if (dso__is_kcore(dso)) {
    is_kallsyms = true;
    name = machine->mmap_name;
    @@ -873,43 +877,30 @@ static int dso__cache_build_id(struct dso *dso, struct machine *machine)
    is_kallsyms, is_vdso);
    }

    -static int __dsos__cache_build_ids(struct list_head *head,
    - struct machine *machine)
    +static int
    +machines__for_each_dso(struct machines *machines, machine__dso_t fn, void *priv)
    {
    - struct dso *pos;
    - int err = 0;
    -
    - dsos__for_each_with_build_id(pos, head)
    - if (dso__cache_build_id(pos, machine))
    - err = -1;
    + int ret = machine__for_each_dso(&machines->host, fn, priv);
    + struct rb_node *nd;

    - return err;
    -}
    + for (nd = rb_first_cached(&machines->guests); nd;
    + nd = rb_next(nd)) {
    + struct machine *pos = rb_entry(nd, struct machine, rb_node);

    -static int machine__cache_build_ids(struct machine *machine)
    -{
    - return __dsos__cache_build_ids(&machine->dsos.head, machine);
    + ret |= machine__for_each_dso(pos, fn, priv);
    + }
    + return ret ? -1 : 0;
    }

    int perf_session__cache_build_ids(struct perf_session *session)
    {
    - struct rb_node *nd;
    - int ret;
    -
    if (no_buildid_cache)
    return 0;

    if (mkdir(buildid_dir, 0755) != 0 && errno != EEXIST)
    return -1;

    - ret = machine__cache_build_ids(&session->machines.host);
    -
    - for (nd = rb_first_cached(&session->machines.guests); nd;
    - nd = rb_next(nd)) {
    - struct machine *pos = rb_entry(nd, struct machine, rb_node);
    - ret |= machine__cache_build_ids(pos);
    - }
    - return ret ? -1 : 0;
    + return machines__for_each_dso(&session->machines, dso__cache_build_id, NULL) ? -1 : 0;
    }

    static bool machine__read_build_ids(struct machine *machine, bool with_hits)
    --
    2.26.2
    \
     
     \ /
      Last update: 2020-11-26 18:09    [W:4.030 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site