diff options
author | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-05-27 12:42:16 -0400 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2011-05-27 15:02:29 -0400 |
commit | e4a338d05df93ab1ebf291aca1e753064319d301 (patch) | |
tree | 39a843944ca23ef9a927030de7295146e8bd5dc4 | |
parent | 5f6f55809758e106eca72c6e01402c8080a88ee8 (diff) |
perf top: Don't stop if no kernel symtab is found
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 <mingo@elte.hu>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephane Eranian <eranian@google.com>
Cc: Tom Zanussi <tzanussi@gmail.com>
Link: http://lkml.kernel.org/n/tip-cj2g81hn64wv2bipmqk4fy2m@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r-- | tools/perf/builtin-top.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/tools/perf/builtin-top.c b/tools/perf/builtin-top.c index 472f62790022..f2f3f4937aa2 100644 --- a/tools/perf/builtin-top.c +++ b/tools/perf/builtin-top.c | |||
@@ -81,6 +81,7 @@ static bool use_tui, use_stdio; | |||
81 | static int default_interval = 0; | 81 | static int default_interval = 0; |
82 | 82 | ||
83 | static bool kptr_restrict_warned; | 83 | static bool kptr_restrict_warned; |
84 | static bool vmlinux_warned; | ||
84 | static bool inherit = false; | 85 | static bool inherit = false; |
85 | static int realtime_prio = 0; | 86 | static int realtime_prio = 0; |
86 | static bool group = false; | 87 | static bool group = false; |
@@ -754,6 +755,7 @@ static void perf_event__process_sample(const union perf_event *event, | |||
754 | } | 755 | } |
755 | 756 | ||
756 | if (al.sym == NULL) { | 757 | if (al.sym == NULL) { |
758 | const char *msg = "Kernel samples will not be resolved.\n"; | ||
757 | /* | 759 | /* |
758 | * As we do lazy loading of symtabs we only will know if the | 760 | * As we do lazy loading of symtabs we only will know if the |
759 | * specified vmlinux file is invalid when we actually have a | 761 | * specified vmlinux file is invalid when we actually have a |
@@ -765,12 +767,20 @@ static void perf_event__process_sample(const union perf_event *event, | |||
765 | * --hide-kernel-symbols, even if the user specifies an | 767 | * --hide-kernel-symbols, even if the user specifies an |
766 | * invalid --vmlinux ;-) | 768 | * invalid --vmlinux ;-) |
767 | */ | 769 | */ |
768 | if (al.map == machine->vmlinux_maps[MAP__FUNCTION] && | 770 | if (!kptr_restrict_warned && !vmlinux_warned && |
771 | al.map == machine->vmlinux_maps[MAP__FUNCTION] && | ||
769 | RB_EMPTY_ROOT(&al.map->dso->symbols[MAP__FUNCTION])) { | 772 | RB_EMPTY_ROOT(&al.map->dso->symbols[MAP__FUNCTION])) { |
770 | ui__warning("The %s file can't be used\n", | 773 | if (symbol_conf.vmlinux_name) { |
771 | symbol_conf.vmlinux_name); | 774 | ui__warning("The %s file can't be used.\n%s", |
772 | exit_browser(0); | 775 | symbol_conf.vmlinux_name, msg); |
773 | exit(1); | 776 | } else { |
777 | ui__warning("A vmlinux file was not found.\n%s", | ||
778 | msg); | ||
779 | } | ||
780 | |||
781 | if (use_browser <= 0) | ||
782 | sleep(5); | ||
783 | vmlinux_warned = true; | ||
774 | } | 784 | } |
775 | 785 | ||
776 | return; | 786 | return; |