perf build-id: Use machine__for_each_dso in perf_session__cache_build_ids

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>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Michael Petlan <mpetlan@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Song Liu <songliubraving@fb.com>
Cc: Stephane Eranian <eranian@google.com>
Link: http://lore.kernel.org/lkml/20201126170026.2619053-19-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Jiri Olsa 2020-11-26 18:00:19 +01:00 committed by Arnaldo Carvalho de Melo
parent 058f151130
commit 0b7b9e83c7
1 changed files with 16 additions and 25 deletions

View File

@ -859,12 +859,16 @@ out_free:
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;
int ret = machine__for_each_dso(&machines->host, fn, priv);
struct rb_node *nd;
dsos__for_each_with_build_id(pos, head)
if (dso__cache_build_id(pos, machine))
err = -1;
for (nd = rb_first_cached(&machines->guests); nd;
nd = rb_next(nd)) {
struct machine *pos = rb_entry(nd, struct machine, rb_node);
return err;
}
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)