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 <jo...@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 <jo...@kernel.org>
>     Acked-by: Song Liu <songliubrav...@fb.com>
>     Cc: Adrian Hunter <adrian.hun...@intel.com>
>     Cc: Alexander Shishkin <alexander.shish...@linux.intel.com>
>     Cc: Andi Kleen <a...@linux.intel.com>
>     Cc: Namhyung Kim <namhy...@kernel.org>
>     Cc: Peter Zijlstra <pet...@infradead.org>
>     Cc: Stanislav Fomichev <s...@google.com>
>     Cc: Thomas Richter <tmri...@linux.ibm.com>
>     Link: http://lkml.kernel.org/r/20190508132010.14512-6-jo...@kernel.org
>     Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
> 
> :040000 040000 4ca5fa4c6f15fd8cf9a0eee870efbd01e9fe309d 
> 8311b30f94e9cf9a863dc9619b0499863f64960e M    tools
> [acme@quaco perf]$
>  
> > Link: http://lkml.kernel.org/n/tip-ynut991ttyyhvo1sbhlm4...@git.kernel.org
> > Signed-off-by: Jiri Olsa <jo...@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

Reply via email to