lkml.org 
[lkml]   [2020]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/5] perf symbols: Don't try to find a vmlinux file when looking for kernel modules
    Date
    From: Arnaldo Carvalho de Melo <acme@redhat.com>

    The dso->kernel value is now set to everything that is in
    machine->kmaps, but that was being used to decide if vmlinux lookup is
    needed, which ended up making that lookup be made for kernel modules,
    that now have dso->kernel set, leading to these kinds of warnings when
    running on a machine with compressed kernel modules, like fedora:31:

    [root@five ~]# perf record -F 10000 -a sleep 2
    [ perf record: Woken up 1 times to write data ]
    lzma: fopen failed on vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /usr/lib/debug/boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /lib/modules/5.5.5-200.fc31.x86_64/build/vmlinux: 'No such file or directory'
    lzma: fopen failed on vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /usr/lib/debug/boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /lib/modules/5.5.5-200.fc31.x86_64/build/vmlinux: 'No such file or directory'
    lzma: fopen failed on vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /usr/lib/debug/boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /lib/modules/5.5.5-200.fc31.x86_64/build/vmlinux: 'No such file or directory'
    lzma: fopen failed on vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /usr/lib/debug/boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /lib/modules/5.5.5-200.fc31.x86_64/build/vmlinux: 'No such file or directory'
    lzma: fopen failed on vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux: 'No such file or directory'
    lzma: fopen failed on /boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /usr/lib/debug/boot/vmlinux-5.5.5-200.fc31.x86_64: 'No such file or directory'
    lzma: fopen failed on /lib/modules/5.5.5-200.fc31.x86_64/build/vmlinux: 'No such file or directory'
    [ perf record: Captured and wrote 1.024 MB perf.data (1366 samples) ]
    [root@five ~]#

    This happens when collecting the buildid, when we find samples for
    kernel modules, fix it by checking if the looked up DSO is a kernel
    module by other means.

    Fixes: 02213cec64bb ("perf maps: Mark module DSOs with kernel type")
    Tested-by: Jiri Olsa <jolsa@redhat.com>
    Acked-by: Jiri Olsa <jolsa@redhat.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Kim Phillips <kim.phillips@amd.com>
    Cc: Michael Petlan <mpetlan@redhat.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Link: http://lore.kernel.org/lkml/20200302191007.GD10335@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    ---
    tools/perf/util/symbol.c | 13 ++++++-------
    1 file changed, 6 insertions(+), 7 deletions(-)

    diff --git a/tools/perf/util/symbol.c b/tools/perf/util/symbol.c
    index 1077013d8ce2..26bc6a0096ce 100644
    --- a/tools/perf/util/symbol.c
    +++ b/tools/perf/util/symbol.c
    @@ -1622,7 +1622,12 @@ int dso__load(struct dso *dso, struct map *map)
    goto out;
    }

    - if (dso->kernel) {
    + kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
    + dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
    + dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
    + dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
    +
    + if (dso->kernel && !kmod) {
    if (dso->kernel == DSO_TYPE_KERNEL)
    ret = dso__load_kernel_sym(dso, map);
    else if (dso->kernel == DSO_TYPE_GUEST_KERNEL)
    @@ -1650,12 +1655,6 @@ int dso__load(struct dso *dso, struct map *map)
    if (!name)
    goto out;

    - kmod = dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE ||
    - dso->symtab_type == DSO_BINARY_TYPE__SYSTEM_PATH_KMODULE_COMP ||
    - dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE ||
    - dso->symtab_type == DSO_BINARY_TYPE__GUEST_KMODULE_COMP;
    -
    -
    /*
    * Read the build id if possible. This is required for
    * DSO_BINARY_TYPE__BUILDID_DEBUGINFO to work
    --
    2.21.1
    \
     
     \ /
      Last update: 2020-03-06 20:13    [W:5.031 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site