summaryrefslogtreecommitdiffstats
path: root/tools/perf/builtin-top.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/perf/builtin-top.c')
-rw-r--r--tools/perf/builtin-top.c35
1 files changed, 7 insertions, 28 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c
index 48cc1084bc3..ea49c2e9dda 100644
--- a/tools/perf/builtin-top.c
+++ b/tools/perf/builtin-top.c
@@ -830,6 +830,8 @@ static void handle_keypress(int c)
case 'q':
case 'Q':
printf("exiting.\n");
+ if (dump_symtab)
+ dsos__fprintf(stderr);
exit(0);
case 's':
prompt_symbol(&sym_filter_entry, "Enter details symbol");
@@ -946,30 +948,6 @@ static int symbol_filter(struct map *map, struct symbol *sym)
return 0;
}
-static int parse_symbols(void)
-{
- struct dso *kernel = dsos__load_kernel();
-
- if (kernel == NULL)
- return -1;
-
- if (dsos__load_modules() < 0)
- pr_debug("Couldn't read the complete list of modules, "
- "continuing...\n");
-
- if (dsos__load_modules_sym(symbol_filter) < 0)
- pr_warning("Failed to read module symbols, continuing...\n");
-
- if (dso__load_kernel_sym(kernel, symbol_filter, 1) <= 0)
- pr_debug("Couldn't read the complete list of kernel symbols, "
- "continuing...\n");
-
- if (dump_symtab)
- dsos__fprintf(stderr);
-
- return 0;
-}
-
static void event__process_sample(const event_t *self, int counter)
{
u64 ip = self->ip.ip;
@@ -1012,7 +990,7 @@ static void event__process_sample(const event_t *self, int counter)
if (hide_kernel_symbols)
return;
- sym = kernel_maps__find_symbol(ip, &map);
+ sym = kernel_maps__find_symbol(ip, &map, symbol_filter);
if (sym == NULL)
return;
break;
@@ -1339,7 +1317,7 @@ static const struct option options[] = {
int cmd_top(int argc, const char **argv, const char *prefix __used)
{
- int counter;
+ int counter, err;
page_size = sysconf(_SC_PAGE_SIZE);
@@ -1363,10 +1341,11 @@ int cmd_top(int argc, const char **argv, const char *prefix __used)
if (delay_secs < 1)
delay_secs = 1;
- parse_symbols();
+ err = kernel_maps__init(true);
+ if (err < 0)
+ return err;
parse_source(sym_filter_entry);
-
/*
* User specified count overrides default frequency.
*/