diff options
author | Ian Rogers <[email protected]> | 2023-06-22 22:45:18 -0700 |
---|---|---|
committer | Namhyung Kim <[email protected]> | 2023-06-23 21:44:48 -0700 |
commit | ce5b293405fda0f80c803b6c838f51ec7f618f90 (patch) | |
tree | f1409d2917e76f5a9db4ac832e95e862b009c29f | |
parent | ae7eb5baad3fd5f9ff69a3721fdaa0324731cf8d (diff) |
perf dso: Sort symbols under lock
Determine if symbols are sorted, set the sorted flag and sort under
the dso lock. Done in the interest of thread safety.
Signed-off-by: Ian Rogers <[email protected]>
Acked-by: Namhyung Kim <[email protected]>
Cc: Carsten Haitzler <[email protected]>
Cc: Mark Rutland <[email protected]>
Cc: Jason Wang <[email protected]>
Cc: Changbin Du <[email protected]>
Cc: Yang Jihong <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Adrian Hunter <[email protected]>
Cc: Arnaldo Carvalho de Melo <[email protected]>
Cc: Jiri Olsa <[email protected]>
Cc: Alexander Shishkin <[email protected]>
Cc: Kan Liang <[email protected]>
Cc: Athira Rajeev <[email protected]>
Cc: Ingo Molnar <[email protected]>
Cc: Christophe JAILLET <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
[ handle the similar code in util/probe-event.c ]
Signed-off-by: Namhyung Kim <[email protected]>
-rw-r--r-- | tools/perf/util/map.c | 3 | ||||
-rw-r--r-- | tools/perf/util/probe-event.c | 3 | ||||
-rw-r--r-- | tools/perf/util/symbol.c | 8 |
3 files changed, 8 insertions, 6 deletions
diff --git a/tools/perf/util/map.c b/tools/perf/util/map.c index f30d34903aa4..a45708289cc6 100644 --- a/tools/perf/util/map.c +++ b/tools/perf/util/map.c @@ -398,8 +398,7 @@ struct symbol *map__find_symbol_by_name(struct map *map, const char *name) return NULL; dso = map__dso(map); - if (!dso__sorted_by_name(dso)) - dso__sort_by_name(dso); + dso__sort_by_name(dso); return dso__find_symbol_by_name(dso, name); } diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c index 6e2110d605fb..e477525f3a6b 100644 --- a/tools/perf/util/probe-event.c +++ b/tools/perf/util/probe-event.c @@ -3767,8 +3767,7 @@ int show_available_funcs(const char *target, struct nsinfo *nsi, goto end; } dso = map__dso(map); - if (!dso__sorted_by_name(dso)) - dso__sort_by_name(dso); + dso__sort_by_name(dso); /* Show all (filtered) symbols */ setup_pager(); diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c index d275d3bef7d5..bb02047e1c59 100644 --- a/tools/perf/util/symbol.c +++ b/tools/perf/util/symbol.c @@ -613,8 +613,12 @@ struct symbol *dso__find_symbol_by_name(struct dso *dso, const char *name) void dso__sort_by_name(struct dso *dso) { - dso__set_sorted_by_name(dso); - return symbols__sort_by_name(&dso->symbol_names, &dso->symbols); + mutex_lock(&dso->lock); + if (!dso__sorted_by_name(dso)) { + symbols__sort_by_name(&dso->symbol_names, &dso->symbols); + dso__set_sorted_by_name(dso); + } + mutex_unlock(&dso->lock); } /* |