From a2873325ffb21cecca8032673eb698cb4d778dc6 Mon Sep 17 00:00:00 2001 From: Jiri Olsa Date: Mon, 4 Jul 2016 14:16:22 +0200 Subject: perf unwind: Add initialized arg into unwind__prepare_access Adding initialized arg into unwind__prepare_access to get feedback about the initialization state. It's not possible to get it from error code, because we return 0 even in case we don't recognize dso, which is valid. The 'initialized' value is used in following patch to speedup unwind__prepare_access calls logic in fork path. Signed-off-by: Jiri Olsa Cc: David Ahern Cc: He Kuang Cc: Namhyung Kim Cc: Peter Zijlstra Link: http://lkml.kernel.org/r/1467634583-29147-4-git-send-email-jolsa@kernel.org [ Remove ; after static inline function signatures, fixes build break ] Signed-off-by: Arnaldo Carvalho de Melo --- tools/perf/util/unwind-libunwind.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'tools/perf/util/unwind-libunwind.c') diff --git a/tools/perf/util/unwind-libunwind.c b/tools/perf/util/unwind-libunwind.c index 854711966cad..6d542a4e0648 100644 --- a/tools/perf/util/unwind-libunwind.c +++ b/tools/perf/util/unwind-libunwind.c @@ -14,15 +14,19 @@ static void unwind__register_ops(struct thread *thread, thread->unwind_libunwind_ops = ops; } -int unwind__prepare_access(struct thread *thread, struct map *map) +int unwind__prepare_access(struct thread *thread, struct map *map, + bool *initialized) { const char *arch; enum dso_type dso_type; struct unwind_libunwind_ops *ops = local_unwind_libunwind_ops; + int err; if (thread->addr_space) { pr_debug("unwind: thread map already set, dso=%s\n", map->dso->name); + if (initialized) + *initialized = true; return 0; } @@ -51,7 +55,10 @@ int unwind__prepare_access(struct thread *thread, struct map *map) out_register: unwind__register_ops(thread, ops); - return thread->unwind_libunwind_ops->prepare_access(thread); + err = thread->unwind_libunwind_ops->prepare_access(thread); + if (initialized) + *initialized = err ? false : true; + return err; } void unwind__flush_access(struct thread *thread) -- cgit v1.2.3