perf tools: Introduce struct maps
tip-bot for Arnaldo Carvalho de Melo
merge botCommit-ID: 1eee78aea9252fabcd333805d5d9fa42a1bf9427 Gitweb: http://git.kernel.org/tip/1eee78aea9252fabcd333805d5d9fa42a1bf9427 Author: Arnaldo Carvalho de Melo <[email protected]> AuthorDate: Fri, 22 May 2015 12:58:53 -0300 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Wed, 27 May 2015 20:21:41 -0300
perf tools: Introduce struct maps
That for now has the maps rbtree and the list for the dead maps, that may be still referenced from some hist_entry, etc.
This paves the way for protecting the rbtree with a lock, then refcount the maps and finally remove the removed_maps list, as it'll not ne anymore needed.
Cc Adrian Hunter <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc David Ahern <[email protected]>
Cc Don Zickus <[email protected]>
Cc Frederic Weisbecker <[email protected]>
Cc Jiri Olsa <[email protected]>
Cc Namhyung Kim <[email protected]>
Cc Stephane Eranian <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/tests/vmlinux-kallsyms.c | 2 +- tools/perf/util/event.c | 2 +- tools/perf/util/map.c | 64 +++++++++++++++++++++---------------- tools/perf/util/map.h | 16 ++++++---- tools/perf/util/probe-event.c | 2 +- tools/perf/util/symbol.c | 4 +-- 6 files changed, 52 insertions(+), 38 deletions(-)
tools/perf/tests/vmlinux-kallsyms.c +1 -1
@@ -26,7 +26,7 @@ int test__vmlinux_matches_kallsyms(void)struct map *kallsyms_map, *vmlinux_map, *map;struct machine kallsyms, vmlinux;enum map_type type =MAP__FUNCTION ; -struct rb_root *maps = &vmlinux.kmaps.maps[type]; +struct maps *maps = &vmlinux.kmaps.maps[type];u64 mem_start, mem_end;/*
tools/perf/util/event.c +1 -1
@@ -331,7 +331,7 @@ int perf_event__synthesize_modules(struct perf_tool *tool,int rc =0 ;struct map *pos;struct map_groups *kmaps = &machine->kmaps; -struct rb_root *maps = &kmaps->maps[MAP__FUNCTION ]; +struct maps *maps = &kmaps->maps[MAP__FUNCTION ];union perf_event *event =zalloc ((sizeof (event->mmap) + machine->id_hdr_size));if (event ==NULL ) {
tools/perf/util/map.c +37 -27
169 lines not on this page · raw message
tools/perf/util/map.h +10 -6
@@ -58,9 +58,13 @@ struct kmap {struct map_groups *kmaps; }; +struct maps { +struct rb_root entries; +struct list_head removed_maps; +}; +struct map_groups { -struct rb_root maps[MAP__NR_TYPES ]; -struct list_head removed_maps[MAP__NR_TYPES ]; +struct maps maps[MAP__NR_TYPES ];struct machine *machine;atomic_t refcnt; };
@@ -162,10 +166,10 @@ void map__reloc_vmlinux(struct map *map);size_t __map_groups__fprintf_maps (struct map_groups *mg,enum map_type type,FILE *fp); -void maps__insert (struct rb_root *maps,struct map *map); -void maps__remove (struct rb_root *maps,struct map *map); -struct map *maps__find (struct rb_root *maps,u64 addr); -struct map *maps__first (struct rb_root *maps); +void maps__insert (struct maps *maps,struct map *map); +void maps__remove (struct maps *maps,struct map *map); +struct map *maps__find (struct maps *maps,u64 addr); +struct map *maps__first (struct maps *maps);struct map *map__next (struct map *map);void map_groups__init (struct map_groups *mg,struct machine *machine);void map_groups__exit (struct map_groups *mg);
tools/perf/util/probe-event.c +1 -1
@@ -163,7 +163,7 @@ static u64 kernel_get_symbol_address_by_name(const char *name, bool reloc)static struct map *kernel_get_module_map (const char *module) {struct map_groups *grp = &host_machine->kmaps; -struct rb_root *maps = &grp->maps[MAP__FUNCTION ]; +struct maps *maps = &grp->maps[MAP__FUNCTION ];struct map *pos;/* A file path -- this is an offline module */
tools/perf/util/symbol.c +2 -2
@@ -202,7 +202,7 @@ void symbols__fixup_end(struct rb_root *symbols)void __map_groups__fixup_end (struct map_groups *mg,enum map_type type) { -struct rb_root *maps = &mg->maps[type]; +struct maps *maps = &mg->maps[type];struct map *next, *curr; curr =maps__first (maps);
@@ -1520,7 +1520,7 @@ out:struct map *map_groups__find_by_name (struct map_groups *mg,enum map_type type,const char *name) { -struct rb_root *maps = &mg->maps[type]; +struct maps *maps = &mg->maps[type];struct map *map;for (map =maps__first (maps); map; map =map__next (map)) {