Skip to content

Commit

Permalink
perf top: Don't stop if no kernel symtab is found
Browse files Browse the repository at this point in the history
We now just warn the user about the fact and go on providing just
userspace samples.

This fixes a problem when no vmlinux is explicetely passed by the user,
thus symbol_conf.vmlinux_name is NULL, no suitable vmlinux is found, and
then we get:

 aldebaran:~> perf top -p 7557
 [kernel.kallsyms] with build id 44d9a989eabbd79e486bc079d6b743d397c204e0
 not found, continuing without symbols
 The (null) file can't be used

Reported-by: Ingo Molnar <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Mike Galbraith <[email protected]>
Cc: Paul Mackerras <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Cc: Stephane Eranian <[email protected]>
Cc: Tom Zanussi <[email protected]>
Link: http://lkml.kernel.org/n/[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <[email protected]>
  • Loading branch information
acmel committed May 27, 2011
1 parent 5f6f558 commit e4a338d
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions tools/perf/builtin-top.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ static bool use_tui, use_stdio;
static int default_interval = 0;

static bool kptr_restrict_warned;
static bool vmlinux_warned;
static bool inherit = false;
static int realtime_prio = 0;
static bool group = false;
Expand Down Expand Up @@ -754,6 +755,7 @@ static void perf_event__process_sample(const union perf_event *event,
}

if (al.sym == NULL) {
const char *msg = "Kernel samples will not be resolved.\n";
/*
* As we do lazy loading of symtabs we only will know if the
* specified vmlinux file is invalid when we actually have a
Expand All @@ -765,12 +767,20 @@ static void perf_event__process_sample(const union perf_event *event,
* --hide-kernel-symbols, even if the user specifies an
* invalid --vmlinux ;-)
*/
if (al.map == machine->vmlinux_maps[MAP__FUNCTION] &&
if (!kptr_restrict_warned && !vmlinux_warned &&
al.map == machine->vmlinux_maps[MAP__FUNCTION] &&
RB_EMPTY_ROOT(&al.map->dso->symbols[MAP__FUNCTION])) {
ui__warning("The %s file can't be used\n",
symbol_conf.vmlinux_name);
exit_browser(0);
exit(1);
if (symbol_conf.vmlinux_name) {
ui__warning("The %s file can't be used.\n%s",
symbol_conf.vmlinux_name, msg);
} else {
ui__warning("A vmlinux file was not found.\n%s",
msg);
}

if (use_browser <= 0)
sleep(5);
vmlinux_warned = true;
}

return;
Expand Down

0 comments on commit e4a338d

Please sign in to comment.