lkml.org 
[lkml]   [2020]   [Jun]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 261/261] perf symbols: Fix kernel maps for kcore and eBPF
    Date
    From: Adrian Hunter <adrian.hunter@intel.com>

    commit 0affd0e5262b6d40f5f63466d88933e99698e240 upstream.

    Adjust 'map->pgoff' also when moving a map's start address.

    Example with v5.4.34 based kernel:

    Before:

    $ sudo tools/perf/perf record -a --kcore -e intel_pt//k sleep 1
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 1.958 MB perf.data ]
    $ sudo tools/perf/perf script --itrace=e >/dev/null
    Warning:
    961 instruction trace errors

    After:

    $ sudo tools/perf/perf script --itrace=e >/dev/null
    $

    Committer testing:

    # uname -a
    Linux seventh 5.6.10-100.fc30.x86_64 #1 SMP Mon May 4 15:36:44 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
    #

    Before:

    # perf record -a --kcore -e intel_pt//k sleep 1
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.923 MB perf.data ]
    # perf script --itrace=e >/dev/null
    Warning:
    295 instruction trace errors
    #

    After:

    # perf record -a --kcore -e intel_pt//k sleep 1
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.919 MB perf.data ]
    # perf script --itrace=e >/dev/null
    #

    Fixes: fb5a88d4131a ("perf tools: Preserve eBPF maps when loading kcore")
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lore.kernel.org/lkml/20200602112505.1406-1-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    tools/perf/util/symbol.c | 2 ++
    1 file changed, 2 insertions(+)

    --- a/tools/perf/util/symbol.c
    +++ b/tools/perf/util/symbol.c
    @@ -1221,6 +1221,7 @@ int map_groups__merge_in(struct map_grou

    m->end = old_map->start;
    list_add_tail(&m->node, &merged);
    + new_map->pgoff += old_map->end - new_map->start;
    new_map->start = old_map->end;
    }
    } else {
    @@ -1241,6 +1242,7 @@ int map_groups__merge_in(struct map_grou
    * |new......| -> |new...|
    * |old....| -> |old....|
    */
    + new_map->pgoff += old_map->end - new_map->start;
    new_map->start = old_map->end;
    }
    }

    \
     
     \ /
      Last update: 2020-06-19 17:22    [W:4.055 / U:1.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site