aboutsummaryrefslogtreecommitdiffstats
path: root/tools/perf/util/symbol.c
diff options
context:
space:
mode:
authorArnaldo Carvalho de Melo <acme@redhat.com>2009-10-28 19:51:21 -0400
committerIngo Molnar <mingo@elte.hu>2009-10-29 03:23:40 -0400
commit66bd8424cc05e800db384053bf7ab967e4658468 (patch)
tree2d58312238c78b1fe8482032e019c9437b3564ed /tools/perf/util/symbol.c
parent689d30187828afe1faedf050b2f7593515b90c76 (diff)
perf tools: Delay loading symtabs till we hit a map with it
So that we can have a quicker start on perf top and even speedups in the other tools, as we can have maps with no hits, so no need to load its symtabs. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Mike Galbraith <efault@gmx.de> LKML-Reference: <1256773881-4191-1-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'tools/perf/util/symbol.c')
-rw-r--r--tools/perf/util/symbol.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
index 8f0208ce237a..0273d83f728f 100644
--- a/tools/perf/util/symbol.c
+++ b/tools/perf/util/symbol.c
@@ -909,6 +909,8 @@ int dso__load(struct dso *self, struct map *map, symbol_filter_t filter)
909 int ret = -1; 909 int ret = -1;
910 int fd; 910 int fd;
911 911
912 self->loaded = true;
913
912 if (!name) 914 if (!name)
913 return -1; 915 return -1;
914 916
@@ -1019,6 +1021,8 @@ static int dso__load_module_sym(struct dso *self, struct map *map,
1019{ 1021{
1020 int err = 0, fd = open(self->long_name, O_RDONLY); 1022 int err = 0, fd = open(self->long_name, O_RDONLY);
1021 1023
1024 self->loaded = true;
1025
1022 if (fd < 0) { 1026 if (fd < 0) {
1023 pr_err("%s: cannot open %s\n", __func__, self->long_name); 1027 pr_err("%s: cannot open %s\n", __func__, self->long_name);
1024 return err; 1028 return err;
@@ -1214,6 +1218,8 @@ static int dso__load_vmlinux(struct dso *self, struct map *map,
1214{ 1218{
1215 int err, fd = open(vmlinux, O_RDONLY); 1219 int err, fd = open(vmlinux, O_RDONLY);
1216 1220
1221 self->loaded = true;
1222
1217 if (fd < 0) 1223 if (fd < 0)
1218 return -1; 1224 return -1;
1219 1225
@@ -1312,19 +1318,15 @@ static struct dso *dsos__find(const char *name)
1312 return NULL; 1318 return NULL;
1313} 1319}
1314 1320
1315struct dso *dsos__findnew(const char *name, unsigned int sym_priv_size, 1321struct dso *dsos__findnew(const char *name, unsigned int sym_priv_size)
1316 bool *is_new)
1317{ 1322{
1318 struct dso *dso = dsos__find(name); 1323 struct dso *dso = dsos__find(name);
1319 1324
1320 if (!dso) { 1325 if (!dso) {
1321 dso = dso__new(name, sym_priv_size); 1326 dso = dso__new(name, sym_priv_size);
1322 if (dso) { 1327 if (dso != NULL)
1323 dsos__add(dso); 1328 dsos__add(dso);
1324 *is_new = true; 1329 }
1325 }
1326 } else
1327 *is_new = false;
1328 1330
1329 return dso; 1331 return dso;
1330} 1332}