Messages in this thread Patch in this message | | | From | Arnaldo Carvalho de Melo <> | Date | Fri, 24 May 2019 15:17:17 -0300 | Subject | Re: [PATCH 05/12] perf tools: Read also the end of the kernel |
| |
Em Fri, May 24, 2019 at 03:15:06PM -0300, Arnaldo Carvalho de Melo escreveu: > Em Wed, May 08, 2019 at 03:20:03PM +0200, Jiri Olsa escreveu: > > We mark the end of kernel based on the first module, > > but that could cover some bpf program maps. Reading > > _etext symbol if it's present to get precise kernel > > map end. > > Investigating... Have you run 'perf test' before hitting the send > button? :-)
<SNIP>
> [root@quaco c]# perf test -v 1 > 1: vmlinux symtab matches kallsyms : <SNIP> > --- start --- > ERR : 0xffffffff8cc00e41: __indirect_thunk_end not on kallsyms <SNIP> > test child finished with -1 > ---- end ---- > vmlinux symtab matches kallsyms: FAILED! > [root@quaco c]#
So...
[root@quaco c]# grep __indirect_thunk_end /proc/kallsyms ffffffff8cc00e41 T __indirect_thunk_end [root@quaco c]# grep -w _etext /proc/kallsyms ffffffff8cc00e41 T _etext [root@quaco c]#
[root@quaco c]# grep -w ffffffff8cc00e41 /proc/kallsyms ffffffff8cc00e41 T _etext ffffffff8cc00e41 T __indirect_thunk_end [root@quaco c]#
Lemme try to fix this.
- Arnaldo > [acme@quaco perf]$ git bisect good > 7d98e1a73bd7dae6cb321ec8b0b97b9fed7c0e1b is the first bad commit > commit 7d98e1a73bd7dae6cb321ec8b0b97b9fed7c0e1b > Author: Jiri Olsa <jolsa@kernel.org> > Date: Wed May 8 15:20:03 2019 +0200 > > perf machine: Read also the end of the kernel > > We mark the end of kernel based on the first module, but that could > cover some bpf program maps. Reading _etext symbol if it's present to > get precise kernel map end. > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > Acked-by: Song Liu <songliubraving@fb.com> > Cc: Adrian Hunter <adrian.hunter@intel.com> > Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> > Cc: Andi Kleen <ak@linux.intel.com> > Cc: Namhyung Kim <namhyung@kernel.org> > Cc: Peter Zijlstra <peterz@infradead.org> > Cc: Stanislav Fomichev <sdf@google.com> > Cc: Thomas Richter <tmricht@linux.ibm.com> > Link: http://lkml.kernel.org/r/20190508132010.14512-6-jolsa@kernel.org > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > :040000 040000 4ca5fa4c6f15fd8cf9a0eee870efbd01e9fe309d 8311b30f94e9cf9a863dc9619b0499863f64960e M tools > [acme@quaco perf]$ > > > Link: http://lkml.kernel.org/n/tip-ynut991ttyyhvo1sbhlm4c42@git.kernel.org > > Signed-off-by: Jiri Olsa <jolsa@kernel.org> > > --- > > tools/perf/util/machine.c | 27 ++++++++++++++++++--------- > > 1 file changed, 18 insertions(+), 9 deletions(-) > > > > diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c > > index 3c520baa198c..ad0205fbb506 100644 > > --- a/tools/perf/util/machine.c > > +++ b/tools/perf/util/machine.c > > @@ -924,7 +924,8 @@ const char *ref_reloc_sym_names[] = {"_text", "_stext", NULL}; > > * symbol_name if it's not that important. > > */ > > static int machine__get_running_kernel_start(struct machine *machine, > > - const char **symbol_name, u64 *start) > > + const char **symbol_name, > > + u64 *start, u64 *end) > > { > > char filename[PATH_MAX]; > > int i, err = -1; > > @@ -949,6 +950,11 @@ static int machine__get_running_kernel_start(struct machine *machine, > > *symbol_name = name; > > > > *start = addr; > > + > > + err = kallsyms__get_function_start(filename, "_etext", &addr); > > + if (!err) > > + *end = addr; > > + > > return 0; > > } > > > > @@ -1440,7 +1446,7 @@ int machine__create_kernel_maps(struct machine *machine) > > struct dso *kernel = machine__get_kernel(machine); > > const char *name = NULL; > > struct map *map; > > - u64 addr = 0; > > + u64 start = 0, end = ~0ULL; > > int ret; > > > > if (kernel == NULL) > > @@ -1459,9 +1465,9 @@ int machine__create_kernel_maps(struct machine *machine) > > "continuing anyway...\n", machine->pid); > > } > > > > - if (!machine__get_running_kernel_start(machine, &name, &addr)) { > > + if (!machine__get_running_kernel_start(machine, &name, &start, &end)) { > > if (name && > > - map__set_kallsyms_ref_reloc_sym(machine->vmlinux_map, name, addr)) { > > + map__set_kallsyms_ref_reloc_sym(machine->vmlinux_map, name, start)) { > > machine__destroy_kernel_maps(machine); > > ret = -1; > > goto out_put; > > @@ -1471,16 +1477,19 @@ int machine__create_kernel_maps(struct machine *machine) > > * we have a real start address now, so re-order the kmaps > > * assume it's the last in the kmaps > > */ > > - machine__update_kernel_mmap(machine, addr, ~0ULL); > > + machine__update_kernel_mmap(machine, start, end); > > } > > > > if (machine__create_extra_kernel_maps(machine, kernel)) > > pr_debug("Problems creating extra kernel maps, continuing anyway...\n"); > > > > - /* update end address of the kernel map using adjacent module address */ > > - map = map__next(machine__kernel_map(machine)); > > - if (map) > > - machine__set_kernel_mmap(machine, addr, map->start); > > + if (end == ~0ULL) { > > + /* update end address of the kernel map using adjacent module address */ > > + map = map__next(machine__kernel_map(machine)); > > + if (map) > > + machine__set_kernel_mmap(machine, start, map->start); > > + } > > + > > out_put: > > dso__put(kernel); > > return ret; > > -- > > 2.20.1 > > -- > > - Arnaldo
--
- Arnaldo
| |