Em Thu, Nov 26, 2020 at 06:00:19PM +0100, Jiri Olsa escreveu:
> 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.

Thanks, applied.

- Arnaldo

 
> Signed-off-by: Jiri Olsa <[email protected]>
> ---
>  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
> 

-- 

- Arnaldo

Reply via email to