25 Jan, 2019

4 commits

  • At the cost of an extra pointer, we can avoid the O(logN) cost of
    finding the first element in the tree (smallest node).

    Signed-off-by: Davidlohr Bueso
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: http://lkml.kernel.org/r/20181206191819.30182-6-dave@stgolabs.net
    Signed-off-by: Arnaldo Carvalho de Melo

    Davidlohr Bueso
     
  • At the cost of an extra pointer, we can avoid the O(logN) cost of
    finding the first element in the tree (smallest node), which is
    something required for nearly every in/srcline callchain node deletion
    (in/srcline__tree_delete()).

    Signed-off-by: Davidlohr Bueso
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: http://lkml.kernel.org/r/20181206191819.30182-4-dave@stgolabs.net
    Signed-off-by: Arnaldo Carvalho de Melo

    Davidlohr Bueso
     
  • There we need just forward declarations, so remove it and add it just on
    the .c files that actually touch the struct definitions.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-wsjxzt99p83jubt6hu0med0f@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • Disentangling the dependency tree, to reduce build time.

    Cc: Adrian Hunter
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: https://lkml.kernel.org/n/tip-n2gcrfmh480rm44p7fra13vv@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

22 Jan, 2019

1 commit

  • Remove duplicate headers which are included more than once in the same
    file.

    Signed-off-by: Brajeswar Ghosh
    Acked-by: Souptick Joarder
    Cc: Alexander Shishkin
    Cc: Colin King
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: Sabyasachi Gupta
    Link: http://lkml.kernel.org/r/20190115135916.GA3629@hp-pavilion-15-notebook-pc-brajeswar
    Signed-off-by: Arnaldo Carvalho de Melo

    Brajeswar Ghosh
     

18 Dec, 2018

1 commit


20 Aug, 2018

5 commits

  • Having comp carrying the compression ID, we no longer need return the
    extension. Removing it and updating the automated test.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: David Ahern
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180817094813.15086-14-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     
  • Add comp to 'struct dso' to hold the compression index. It will be used
    in the following patches.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: David Ahern
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180817094813.15086-8-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     
  • Store a decompression ID in 'struct kmod_path', so it can be later
    stored in 'struct dso'.

    Switch 'struct kmod_path's 'comp' from 'bool' to 'int' to return the
    compressions array index. Add 0 index item into compressions array, so
    that the comp usage stays as it was: 0 - no compression, != 0
    compression index.

    Update the kmod_path tests.

    Committer notes:

    Use a designated initializer + terminating comma, e.g. { .fmt = NULL, }, to fix
    the build in several distros:

    centos:6: util/dso.c:201: error: missing initializer
    centos:6: util/dso.c:201: error: (near initialization for 'compressions[0].decompress')
    debian:9: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    fedora:25: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    fedora:26: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    fedora:27: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    oraclelinux:6: util/dso.c:201: error: missing initializer
    oraclelinux:6: util/dso.c:201: error: (near initialization for 'compressions[0].decompress')
    ubuntu:12.04.5: util/dso.c:201:2: error: missing initializer [-Werror=missing-field-initializers]
    ubuntu:12.04.5: util/dso.c:201:2: error: (near initialization for 'compressions[0].decompress') [-Werror=missing-field-initializers]
    ubuntu:16.04: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    ubuntu:16.10: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    ubuntu:16.10: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]
    ubuntu:17.10: util/dso.c:201:24: error: missing field 'decompress' initializer [-Werror,-Wmissing-field-initializers]

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: David Ahern
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180817094813.15086-7-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     
  • There's no outside user of it.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: David Ahern
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180817094813.15086-6-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     
  • There's no outside user of it.

    Signed-off-by: Jiri Olsa
    Cc: Alexander Shishkin
    Cc: David Ahern
    Cc: Michael Petlan
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20180817094813.15086-5-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

27 Apr, 2018

2 commits

  • Remove the split of symbol tables for data (MAP__VARIABLE) and for
    functions (MAP__FUNCTION), its unneeded and there were various places
    doing two lookups to find a symbol, so simplify this.

    We still will consider only the symbols that matched the filters in
    place, i.e. see the (elf_(sec,sym)|symbol_type)__filter() routines in
    the patch, just so that we consider only the same symbols as before,
    to reduce the possibility of regressions.

    All the tests on 50-something build environments, in varios versions
    of lots of distros and cross build environments were performed without
    build regressions, as usual with all pull requests the other tests were
    also performed: 'perf test' and 'make -C tools/perf build-test'.

    Also this was done at a great granularity so that regressions can be
    bisected more easily.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-hiq0fy2rsleupnqqwuojo1ne@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • To replace longer code sequences in various places.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Wang Nan
    Link: https://lkml.kernel.org/n/tip-tlk3klbkfyjrbfjvryyznfju@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

07 Nov, 2017

1 commit

  • Conflicts:
    tools/perf/arch/arm/annotate/instructions.c
    tools/perf/arch/arm64/annotate/instructions.c
    tools/perf/arch/powerpc/annotate/instructions.c
    tools/perf/arch/s390/annotate/instructions.c
    tools/perf/arch/x86/tests/intel-cqm.c
    tools/perf/ui/tui/progress.c
    tools/perf/util/zlib.c

    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

02 Nov, 2017

1 commit

  • Many source files in the tree are missing licensing information, which
    makes it harder for compliance tools to determine the correct license.

    By default all files without license information are under the default
    license of the kernel, which is GPL version 2.

    Update the files which contain no license information with the 'GPL-2.0'
    SPDX license identifier. The SPDX identifier is a legally binding
    shorthand, which can be used instead of the full boiler plate text.

    This patch is based on work done by Thomas Gleixner and Kate Stewart and
    Philippe Ombredanne.

    How this work was done:

    Patches were generated and checked against linux-4.14-rc6 for a subset of
    the use cases:
    - file had no licensing information it it.
    - file was a */uapi/* one with no licensing information in it,
    - file was a */uapi/* one with existing licensing information,

    Further patches will be generated in subsequent months to fix up cases
    where non-standard license headers were used, and references to license
    had to be inferred by heuristics based on keywords.

    The analysis to determine which SPDX License Identifier to be applied to
    a file was done in a spreadsheet of side by side results from of the
    output of two independent scanners (ScanCode & Windriver) producing SPDX
    tag:value files created by Philippe Ombredanne. Philippe prepared the
    base worksheet, and did an initial spot review of a few 1000 files.

    The 4.13 kernel was the starting point of the analysis with 60,537 files
    assessed. Kate Stewart did a file by file comparison of the scanner
    results in the spreadsheet to determine which SPDX license identifier(s)
    to be applied to the file. She confirmed any determination that was not
    immediately clear with lawyers working with the Linux Foundation.

    Criteria used to select files for SPDX license identifier tagging was:
    - Files considered eligible had to be source code files.
    - Make and config files were included as candidates if they contained >5
    lines of source
    - File already had some variant of a license header in it (even if
    Reviewed-by: Philippe Ombredanne
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     

25 Oct, 2017

1 commit

  • On one hand this ensures that the memory is properly freed when the DSO
    gets freed. On the other hand this significantly speeds up the
    processing of the callchain nodes when lots of srclines are requested.
    For one of my data files e.g.:

    Before:

    Performance counter stats for 'perf report -s srcline -g srcline --stdio':

    52496.495043 task-clock (msec) # 0.999 CPUs utilized
    634 context-switches # 0.012 K/sec
    2 cpu-migrations # 0.000 K/sec
    191,561 page-faults # 0.004 M/sec
    165,074,498,235 cycles # 3.144 GHz
    334,170,832,408 instructions # 2.02 insn per cycle
    90,220,029,745 branches # 1718.591 M/sec
    654,525,177 branch-misses # 0.73% of all branches

    52.533273822 seconds time elapsedProcessed 236605 events and lost 40 chunks!

    After:

    Performance counter stats for 'perf report -s srcline -g srcline --stdio':

    22606.323706 task-clock (msec) # 1.000 CPUs utilized
    31 context-switches # 0.001 K/sec
    0 cpu-migrations # 0.000 K/sec
    185,471 page-faults # 0.008 M/sec
    71,188,113,681 cycles # 3.149 GHz
    133,204,943,083 instructions # 1.87 insn per cycle
    34,886,384,979 branches # 1543.214 M/sec
    278,214,495 branch-misses # 0.80% of all branches

    22.609857253 seconds time elapsed

    Note that the difference is only this large when `--inline` is not
    passed. In such situations, we would use the inliner cache and thus do
    not run this code path that often.

    I think that this cache should actually be used in other places, too.
    When looking at the valgrind leak report for perf report, we see tons of
    srclines being leaked, most notably from calls to
    hist_entry__get_srcline. The problem is that get_srcline has many
    different formatting options (show_sym, show_addr, potentially even
    unwind_inlines when calling __get_srcline directly). As such, the
    srcline cannot easily be cached for all calls, or we'd have to add
    caches for all formatting combinations (6 so far). An alternative would
    be to remove the formatting options and handle that on a different level
    - i.e. print the sym/addr on demand wherever we actually output
    something. And the unwind_inlines could be moved into a separate
    function that does not return the srcline.

    Signed-off-by: Milian Wolff
    Reviewed-by: Andi Kleen
    Cc: David Ahern
    Cc: Jin Yao
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20171019113836.5548-4-milian.wolff@kdab.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Milian Wolff
     

24 Oct, 2017

1 commit

  • The inline_node structs are maintained by the new dso->inlines tree.
    This in turn keeps ownership of the fake symbols and srcline string
    representing an inline frame.

    This tree is sorted by address to allow quick lookups. All other entries
    of the symbol beside the function name are unused for inline frames. The
    advantage of this approach is that all existing users of the callchain
    API can now transparently display inlined frames without having to patch
    their code.

    Signed-off-by: Milian Wolff
    Reviewed-by: Jiri Olsa
    Reviewed-by: Namhyung Kim
    Cc: David Ahern
    Cc: Peter Zijlstra
    Cc: Yao Jin
    Link: http://lkml.kernel.org/r/20171009203310.17362-6-milian.wolff@kdab.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Milian Wolff
     

22 Sep, 2017

1 commit

  • Andi reported a performance drop in single threaded perf tools such as
    'perf script' due to the growing number of locks being put in place to
    allow for multithreaded tools, so wrap the POSIX threads rwlock routines
    with the names used for such kinds of locks in the Linux kernel and then
    allow for tools to ask for those locks to be used or not.

    I.e. a tool may have a multithreaded phase and then switch to single
    threaded, like the upcoming patches for the synthesizing of
    PERF_RECORD_{FORK,MMAP,etc} for pre-existing processes to then switch to
    single threaded mode in 'perf top'.

    The init routines will not be conditional, this way starting as single
    threaded to then move to multi threaded mode should be possible.

    Reported-by: Andi Kleen
    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Kan Liang
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: Wang Nan
    Link: http://lkml.kernel.org/r/20170404161739.GH12903@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

19 Jul, 2017

2 commits

  • If a stripped binary is placed in the cache, the user is in a situation
    where there's a cached elf file present, but it doesn't have any symtab
    to use for name resolution. Grab the debuginfo for binaries that don't
    end in .ko. This yields a better chance of resolving symbols from older
    traces.

    Signed-off-by: Krister Johansen
    Cc: Alexander Shishkin
    Cc: Brendan Gregg
    Cc: Peter Zijlstra
    Cc: Thomas-Mich Richter
    Link: http://lkml.kernel.org/r/1499305693-1599-7-git-send-email-kjlx@templeofstupid.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Krister Johansen
     
  • Teach perf how to resolve symbols from binaries that are in a different
    mount namespace from the tool. This allows perf to generate meaningful
    stack traces even if the binary resides in a different mount namespace
    from the tool.

    Signed-off-by: Krister Johansen
    Tested-by: Brendan Gregg
    Cc: Alexander Shishkin
    Cc: Peter Zijlstra
    Cc: Thomas-Mich Richter
    Link: http://lkml.kernel.org/r/1499305693-1599-2-git-send-email-kjlx@templeofstupid.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Krister Johansen
     

09 Jun, 2017

1 commit

  • Move decompress_kmodule() to util/dso.c and split it into two functions
    returning fd and (decompressed) file path. The existing user only wants
    the fd version but the path version will be used soon.

    Signed-off-by: Namhyung Kim
    Acked-by: Jiri Olsa
    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Peter Zijlstra
    Cc: Wang Nan
    Cc: kernel-team@lge.com
    Link: http://lkml.kernel.org/r/20170608073109.30699-4-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     

06 Jun, 2017

1 commit

  • Like machine__findnew_module_dso(), it should set necessary info for
    kernel modules to find symbol info from the file. Factor out
    dso__set_module_info() to do it.

    This is needed for dso__needs_decompress() to detect such DSOs.

    Signed-off-by: Namhyung Kim
    Acked-by: Jiri Olsa
    Cc: Andi Kleen
    Cc: David Ahern
    Cc: Peter Zijlstra
    Cc: kernel-team@lge.com
    Link: http://lkml.kernel.org/r/20170531120105.21731-2-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     

04 Mar, 2017

1 commit

  • The refcount_t type and corresponding API should be used instead of atomic_t
    when the variable is used as a reference counter.

    This allows to avoid accidental refcounter overflows that might lead to
    use-after-free situations.

    Signed-off-by: Elena Reshetova
    Signed-off-by: David Windsor
    Signed-off-by: Hans Liljestrand
    Signed-off-by: Kees Kook
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Alexander Shishkin
    Cc: Andrew Morton
    Cc: David Windsor
    Cc: Greg Kroah-Hartman
    Cc: Hans Liljestrand
    Cc: Jiri Olsa
    Cc: Kees Kook
    Cc: Mark Rutland
    Cc: Matija Glavinic Pecotic
    Cc: Peter Zijlstra
    Cc: alsa-devel@alsa-project.org
    Link: http://lkml.kernel.org/r/1487691303-31858-5-git-send-email-elena.reshetova@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Elena Reshetova
     

13 Jul, 2016

1 commit


01 Jul, 2016

1 commit

  • I hit a bug when running test suite without forking
    each test (-F option):

    $ perf test -F dso
    8: Test dso data read : Ok
    9: Test dso data cache : FAILED!
    10: Test dso data reopen : FAILED!

    The reason the session file limit is set just once for
    perf process so we need to reset it for each test,
    otherwise wrong limit is taken into account.

    Signed-off-by: Jiri Olsa
    Tested-by: Arnaldo Carvalho de Melo
    Tested-by: Nilay Vaish
    Cc: David Ahern
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1467113345-12669-2-git-send-email-jolsa@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa
     

31 May, 2016

1 commit

  • Use path/to/bin/buildid/elf instead of path/to/bin/buildid
    to store corresponding elf binary.
    This also stores vdso in buildid/vdso, kallsyms in buildid/kallsyms.

    Note that the existing caches are not updated until user adds
    or updates the cache. Anyway, if there is the old style build-id
    cache it falls back to use it. (IOW, it is backward compatible)

    Signed-off-by: Masami Hiramatsu
    Signed-off-by: Masami Hiramatsu
    Acked-by: Namhyung Kim
    Cc: Ananth N Mavinakayanahalli
    Cc: Brendan Gregg
    Cc: Hemant Kumar
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/20160528151537.16098.85815.stgit@devbox
    Signed-off-by: Arnaldo Carvalho de Melo

    Masami Hiramatsu
     

23 Mar, 2016

1 commit


19 Mar, 2016

1 commit

  • Store DSO's .text offset into DSO, used for VDSOs and will also be used for
    other needs, like handling kernel modules.

    Signed-off-by: Wang Nan
    Cc: Adrian Hunter
    Cc: Alexei Starovoitov
    Cc: Cody P Schafer
    Cc: He Kuang
    Cc: Jiri Olsa
    Cc: Kirill Smelkov
    Cc: Li Zefan
    Cc: Masami Hiramatsu
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: pi3orama@163.com
    Link: http://lkml.kernel.org/r/1456479154-136027-2-git-send-email-wangnan0@huawei.com
    [ Extracted from larger patch ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Wang Nan
     

13 Nov, 2015

1 commit

  • Commit 4598a0a6d22f ("perf symbols: Improve DSO long names lookup speed
    with rbtree") Added a tree to lookup dsos by long name. That tree gets
    corrupted whenever a dso long name is changed because the tree is not
    updated.

    One effect of that is buildid-list does not work with the 'with-hits'
    option because dso lookup fails and results in two structs for the same
    dso. The first has the buildid but no hits, the second has hits but no
    buildid. e.g.

    Before:

    $ tools/perf/perf record ls
    arch certs CREDITS Documentation firmware include
    ipc Kconfig lib Makefile net REPORTING-BUGS
    scripts sound usr block COPYING crypto
    drivers fs init Kbuild kernel MAINTAINERS
    mm README samples security tools virt
    [ perf record: Woken up 1 times to write data ]
    [ perf record: Captured and wrote 0.012 MB perf.data (11 samples) ]
    $ tools/perf/perf buildid-list
    574da826c66538a8d9060d393a8866289bd06005 [kernel.kallsyms]
    30c94dc66a1fe95180c3d68d2b89e576d5ae213c /lib/x86_64-linux-gnu/libc-2.19.so
    $ tools/perf/perf buildid-list -H
    574da826c66538a8d9060d393a8866289bd06005 [kernel.kallsyms]
    0000000000000000000000000000000000000000 /lib/x86_64-linux-gnu/libc-2.19.so

    After:

    $ tools/perf/perf buildid-list -H
    574da826c66538a8d9060d393a8866289bd06005 [kernel.kallsyms]
    30c94dc66a1fe95180c3d68d2b89e576d5ae213c /lib/x86_64-linux-gnu/libc-2.19.so

    The fix is to record the root of the tree on the dso so that
    dso__set_long_name() can update the tree when the long name changes.

    Signed-off-by: Adrian Hunter
    Tested-by: Arnaldo Carvalho de Melo
    Cc: Adrian Hunter
    Cc: Don Zickus
    Cc: Douglas Hatch
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: Scott J Norton
    Cc: Waiman Long
    Fixes: 4598a0a6d22f ("perf symbols: Improve DSO long names lookup speed with rbtree")
    Link: http://lkml.kernel.org/r/1447408112-1920-2-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Adrian Hunter
     

25 Aug, 2015

1 commit

  • The 'annotate' tool does some filtering in the entries in a DSO but
    forgot to reset the cache done in dso__find_symbol(), cauxing a SEGV:

    [root@zoo ~]# perf annotate netlink_poll
    perf: Segmentation fault
    -------- backtrace --------
    perf[0x526ceb]
    /lib64/libc.so.6(+0x34960)[0x7faedfbe0960]
    perf(rb_erase+0x223)[0x499d63]
    perf[0x4213e9]
    perf[0x4bc123]
    perf[0x4bc621]
    perf[0x4bf26b]
    perf[0x4bc855]
    perf(perf_session__process_events+0x340)[0x4bddc0]
    perf(cmd_annotate+0x6bb)[0x421b5b]
    perf[0x479063]
    perf(main+0x60a)[0x42098a]
    /lib64/libc.so.6(__libc_start_main+0xf0)[0x7faedfbcbfe0]
    perf[0x420aa9]
    [0x0]
    [root@zoo ~]#

    Fix it by reseting the find cache when removing symbols.

    Cc: Adrian Hunter
    Cc: Borislav Petkov
    Cc: David Ahern
    Cc: Frederic Weisbecker
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Stephane Eranian
    Fixes: b685ac22b436 ("perf symbols: Add front end cache for DSO symbol lookup")
    Link: http://lkml.kernel.org/n/tip-b2y9x46y0t8yem1ive41zqyp@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

23 Jul, 2015

1 commit


08 Jun, 2015

2 commits

  • This has a different model than the 'thread' and 'map' struct lifetimes:
    there is not a definitive "don't use this DSO anymore" event, i.e. we may
    get many 'struct map' holding references to the '/usr/lib64/libc-2.20.so'
    DSO but then at some point some DSO may have no references but we still
    don't want to straight away release its resources, because "soon" we may
    get a new 'struct map' that needs it and we want to reuse its symtab or
    other resources.

    So we need some way to garbage collect it when crossing some memory
    usage threshold, which is left for anoter patch, for now it is
    sufficient to release it when calling dsos__exit(), i.e. when deleting
    the whole list as part of deleting the 'struct machine' containing it,
    which will leave only referenced objects being used.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: http://lkml.kernel.org/n/tip-majzgz07cm90t2tejrjy4clf@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     
  • To allow concurrent access, next step: refcount struct dso instances, so
    that we can ditch unused them when the last map pointing to it goes
    away.

    Cc: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Link: http://lkml.kernel.org/n/tip-yk1k08etpd2aoe3tnrf0oizn@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

03 Jun, 2015

1 commit

  • Before patch ba92732e9808 ('perf kmaps: Check kmaps to make code more
    robust'), 'perf report' and 'perf annotate' will segfault if trace data
    contains kernel module information like this:

    # perf report -D -i ./perf.data
    ...
    0 0 0x188 [0x50]: PERF_RECORD_MMAP -1/0: [0xffffffbff1018000(0xf068000) @ 0]: x [test_module]
    ...

    # perf report -i ./perf.data --objdump=/path/to/objdump --kallsyms=/path/to/kallsyms

    perf: Segmentation fault
    -------- backtrace --------
    /path/to/perf[0x503478]
    /lib64/libc.so.6(+0x3545f)[0x7fb201f3745f]
    /path/to/perf[0x499b56]
    /path/to/perf(dso__load_kallsyms+0x13c)[0x49b56c]
    /path/to/perf(dso__load+0x72e)[0x49c21e]
    /path/to/perf(map__load+0x6e)[0x4ae9ee]
    /path/to/perf(thread__find_addr_map+0x24c)[0x47deec]
    /path/to/perf(perf_event__preprocess_sample+0x88)[0x47e238]
    /path/to/perf[0x43ad02]
    /path/to/perf[0x4b55bc]
    /path/to/perf(ordered_events__flush+0xca)[0x4b57ea]
    /path/to/perf[0x4b1a01]
    /path/to/perf(perf_session__process_events+0x3be)[0x4b428e]
    /path/to/perf(cmd_report+0xf11)[0x43bfc1]
    /path/to/perf[0x474702]
    /path/to/perf(main+0x5f5)[0x42de95]
    /lib64/libc.so.6(__libc_start_main+0xf4)[0x7fb201f23bd4]
    /path/to/perf[0x42dfc4]

    This is because __kmod_path__parse treats '[' leading names as kernel
    name instead of names of kernel module.

    If perf.data contains build information and the buildid of such modules
    can be found, the dso->kernel of it will be set to DSO_TYPE_KERNEL by
    __event_process_build_id(), not kernel module.

    It will then be passed to dso__load() -> dso__load_kernel_sym() ->
    dso__load_kcore() if --kallsyms is provided.

    The refered patch adds NULL pointer checker to avoid segfault. However,
    such kernel modules are still processed incorrectly.

    This patch fixes __kmod_path__parse, makes it treat names like
    '[test_module]' as kernel modules.

    kmod-path.c is also update to reflect the above changes.

    Signed-off-by: Wang Nan
    Acked-by: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Zefan Li
    Link: http://lkml.kernel.org/r/1433321541-170245-1-git-send-email-wangnan0@huawei.com
    [ Fixed the merged with 0443f36b0de0 ("perf machine: Fix the search
    for the kernel DSO on the unified list" ]
    Signed-off-by: Arnaldo Carvalho de Melo

    Wang Nan
     

29 May, 2015

1 commit

  • It never was a 'struct dso' method, so fix that by rename
    dso__kernel_findnew() to machine__findnew_kernel().

    At some point I'll move it all to the machine.[ch] files, for now
    lets ease patch review by not moving too much stuff.

    Cc: Adrian Hunter
    Cc: Borislav Petkov
    Cc: David Ahern
    Cc: Don Zickus
    Cc: Frederic Weisbecker
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/n/tip-zrxmblgsg5vx0iv4rhvq2f6l@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

27 May, 2015

1 commit

  • Using dso__data_fd() in multi-thread environment is not safe since
    returned fd can be closed and/or reused anytime.

    So convert it to the dso__data_get/put_fd() pair to protect the access
    with lock.

    The original dso__data_fd() is deprecated and kept only for testing.

    Signed-off-by: Namhyung Kim
    Acked-by: Adrian Hunter
    Cc: David Ahern
    Cc: Jiri Olsa
    Cc: Peter Zijlstra
    Link: http://lkml.kernel.org/r/1432137821-10853-3-git-send-email-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     

18 May, 2015

1 commit

  • Add mutex to protect it from concurrent dso__load().

    Signed-off-by: Namhyung Kim
    Cc: Adrian Hunter
    Cc: Andi Kleen
    Cc: David Ahern
    Cc: Frederic Weisbecker
    Cc: Jiri Olsa
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/1431909055-21442-26-git-send-email-namhyung@kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Namhyung Kim
     

29 Apr, 2015

1 commit

  • Add a member to struct dso that can be used by Instruction Trace
    implementations to hold a cache for decoded instructions.

    Signed-off-by: Adrian Hunter
    Cc: David Ahern
    Cc: Frederic Weisbecker
    Cc: Jiri Olsa
    Cc: Namhyung Kim
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/r/1428594864-29309-16-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo

    Adrian Hunter
     

24 Mar, 2015

1 commit

  • Before, when some problem happened while trying to load the kernel
    symtab, 'perf top' would show:

    ┌─Warning:───────────────────────────┐
    │The vmlinux file can't be used. │
    │Kernel samples will not be resolved.│
    │ │
    │ │
    │Press any key... │
    └────────────────────────────────────┘

    Now, it reports:

    # perf top --vmlinux /dev/null

    ┌─Warning:───────────────────────────────────────────┐
    │The /tmp/passwd file can't be used: Invalid ELF file│
    │Kernel samples will not be resolved. │
    │ │
    │ │
    │Press any key... │
    └────────────────────────────────────────────────────┘

    This is possible because we now register the reason for not being able
    to load the symtab in the dso->load_errno member, and provide a
    dso__strerror_load() routine to format this error into a strerror like
    string with a short reason for the error while loading.

    That can be just forwarding the dso__strerror_load() call to
    strerror_r(), or, for a separate errno range providing a custom message.

    Reported-by: Ingo Molnar
    Acked-by: Jiri Olsa
    Cc: Adrian Hunter
    Cc: Borislav Petkov
    Cc: David Ahern
    Cc: Don Zickus
    Cc: Frederic Weisbecker
    Cc: Namhyung Kim
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/n/tip-u5rb5uq63xqhkfb8uv2lxd5u@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Arnaldo Carvalho de Melo
     

23 Mar, 2015

1 commit

  • Because it's no longer needed.

    Signed-off-by: Jiri Olsa
    Acked-by: Namhyung Kim
    Cc: Adrian Hunter
    Cc: Corey Ashford
    Cc: David Ahern
    Cc: Frederic Weisbecker
    Cc: Paul Mackerras
    Cc: Peter Zijlstra
    Cc: Stephane Eranian
    Link: http://lkml.kernel.org/n/tip-bb84vlg76t78q8y8fdeed2qn@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo

    Jiri Olsa