perf report: fix crash showing warning related to kernel maps
PATCH 1/1 perf report: fix crash showing warning related to kernel maps
While testing https://lkml.org/lkml/2012/4/10/123 I hit this crash:
(gdb) bt
0 0x000000000042000f in __cmd_report (rep=0x7fff80cec580) at builtin-report.c:380 1 cmd_report (argc=0, argv=<optimized out>, prefix=<optimized out>) at builtin-report.c:759 2 0x0000000000414513 in run_builtin (p=0x7724a8, argc=3, argv=0x7fff80ceca70) at perf.c:273 3 0x0000000000413d41 in handle_internal_command (argv=0x7fff80ceca70, argc=3) at perf.c:345 4 run_argv (argv=0x7fff80cec880, argcp=0x7fff80cec88c) at perf.c:389 5 main (argc=3, argv=0x7fff80ceca70) at perf.c:487
kernel_map can be NULL, so need to handle it while dumping a warning to user.
v2:
- fixed RB_EMPTY_ROOT check -- desc takes the altnerative output when RB_EMPTY_ROOT is false.
Signed-off-by David Ahern <[email protected]>
--- tools/perf/builtin-report.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-)
tools/perf/builtin-report.c +12 -5
@@ -374,16 +374,23 @@ static int __cmd_report(struct perf_report *rep) (kernel_map->dso->hit && (kernel_kmap->ref_reloc_sym == NULL || kernel_kmap->ref_reloc_sym->addr == 0))) { -const struct dso *kdso = kernel_map->dso; +const char *desc = +"As no suitable kallsyms nor vmlinux was found, kernel samples\n" +"can't be resolved." ; + +if (kernel_map) { +const struct dso *kdso = kernel_map->dso; +if (!RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ])) { + desc ="If some relocation was applied (e.g. " +"kexec) symbols may be misresolved." ; + } + }ui__warning ("Kernel address maps (/proc/{kallsyms,modules}) were restricted.\n\n" "Check /proc/sys/kernel/kptr_restrict before running 'perf record'.\n\n%s\n\n" "Samples in kernel modules can't be resolved as well.\n\n" , -RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ]) ? -"As no suitable kallsyms nor vmlinux was found, kernel samples\n" -"can't be resolved." : -"If some relocation was applied (e.g. kexec) symbols may be misresolved." ); + desc); }if (dump_trace) {
Signature · 1 line
1.7.5.4
[tip:perf/urgent] perf report: Fix crash showing warning related to kernel maps
Commit-ID: 9e755756e4a22784abfb001688357745ea8ca97c Gitweb: http://git.kernel.org/tip/9e755756e4a22784abfb001688357745ea8ca97c Author: David Ahern <[email protected]> AuthorDate: Sun, 15 Apr 2012 20:54:15 -0600 Committer: Arnaldo Carvalho de Melo <[email protected]> CommitDate: Mon, 16 Apr 2012 11:18:22 -0300
perf report: Fix crash showing warning related to kernel maps
While testing https://lkml.org/lkml/2012/4/10/123 I hit this crash:
(gdb) bt
0 0x000000000042000f in __cmd_report (rep=0x7fff80cec580) at builtin-report.c:380 1 cmd_report (argc=0, argv=<optimized out>, prefix=<optimized out>) at builtin-report.c:759 2 0x0000000000414513 in run_builtin (p=0x7724a8, argc=3, argv=0x7fff80ceca70) at perf.c:273 3 0x0000000000413d41 in handle_internal_command (argv=0x7fff80ceca70, argc=3) at perf.c:345 4 run_argv (argv=0x7fff80cec880, argcp=0x7fff80cec88c) at perf.c:389 5 main (argc=3, argv=0x7fff80ceca70) at perf.c:487
kernel_map can be NULL, so need to handle it while dumping a warning to user.
v2:
- fixed RB_EMPTY_ROOT check -- desc takes the altnerative output when RB_EMPTY_ROOT is false.
Signed-off-by David Ahern <[email protected]>
Cc Ingo Molnar <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Stephane Eranian <[email protected]>
Cc Namhyung Kim <[email protected]>
Signed-off-by Arnaldo Carvalho de Melo <[email protected]>
--- tools/perf/builtin-report.c | 17 ++++++++++++----- 1 files changed, 12 insertions(+), 5 deletions(-)
tools/perf/builtin-report.c +12 -5
@@ -374,16 +374,23 @@ static int __cmd_report(struct perf_report *rep) (kernel_map->dso->hit && (kernel_kmap->ref_reloc_sym == NULL || kernel_kmap->ref_reloc_sym->addr == 0))) { -const struct dso *kdso = kernel_map->dso; +const char *desc = +"As no suitable kallsyms nor vmlinux was found, kernel samples\n" +"can't be resolved." ; + +if (kernel_map) { +const struct dso *kdso = kernel_map->dso; +if (!RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ])) { + desc ="If some relocation was applied (e.g. " +"kexec) symbols may be misresolved." ; + } + }ui__warning ("Kernel address maps (/proc/{kallsyms,modules}) were restricted.\n\n" "Check /proc/sys/kernel/kptr_restrict before running 'perf record'.\n\n%s\n\n" "Samples in kernel modules can't be resolved as well.\n\n" , -RB_EMPTY_ROOT (&kdso->symbols[MAP__FUNCTION ]) ? -"As no suitable kallsyms nor vmlinux was found, kernel samples\n" -"can't be resolved." : -"If some relocation was applied (e.g. kexec) symbols may be misresolved." ); + desc); }if (dump_trace) {