| Date | Tue, 24 Oct 2023 15:23:35 -0700 | Subject | [PATCH v3 32/50] perf maps: Do simple merge if given map doesn't overlap | From | Ian Rogers <> |
| |
Simplify merge in for the simple case of a non-overlapping map.
Signed-off-by: Ian Rogers <irogers@google.com> --- tools/perf/util/maps.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/tools/perf/util/maps.c b/tools/perf/util/maps.c index 40df08dd9bf3..14e1a169433d 100644 --- a/tools/perf/util/maps.c +++ b/tools/perf/util/maps.c @@ -696,9 +696,20 @@ void maps__fixup_end(struct maps *maps) int maps__merge_in(struct maps *kmaps, struct map *new_map) { struct map_rb_node *rb_node; + struct rb_node *first; + bool overlaps; LIST_HEAD(merged); int err = 0; + down_read(maps__lock(kmaps)); + first = first_ending_after(kmaps, new_map); + overlaps = first && + map__start(rb_entry(first, struct map_rb_node, rb_node)->map) < map__end(new_map); + up_read(maps__lock(kmaps)); + + if (!overlaps) + return maps__insert(kmaps, new_map); + maps__for_each_entry(kmaps, rb_node) { struct map *old_map = rb_node->map; -- 2.42.0.758.gaed0368e0e-goog
|