1. 10 12月, 2015 2 次提交
    • M
      perf tools: Fix map_groups__clone to put cloned map · bae32b50
      Masami Hiramatsu 提交于
      Fix map_groups__clone to put cloned map after inserting it to the
      map_groups.
      
      Refcnt debugger shows:
        ----
        ==== [0] ====
        Unreclaimed map: 0x2a27ee0
        Refcount +1 => 1 at
          ./perf(map_groups__clone+0x8d) [0x4bb7ed]
          ./perf(thread__fork+0xbe) [0x4c1f9e]
          ./perf(machine__process_fork_event+0x216) [0x4b79a6]
          ./perf(perf_event__synthesize_threads+0x38b) [0x48135b]
          ./perf(cmd_top+0xdc6) [0x43cb76]
          ./perf() [0x477223]
          ./perf(main+0x617) [0x422077]
          /lib64/libc.so.6(__libc_start_main+0xf0) [0x7ff806af8fe0]
          ./perf() [0x4221ed]
        Refcount +1 => 2 at
          ./perf(map_groups__clone+0x128) [0x4bb888]
          ./perf(thread__fork+0xbe) [0x4c1f9e]
          ./perf(machine__process_fork_event+0x216) [0x4b79a6]
          ./perf(perf_event__synthesize_threads+0x38b) [0x48135b]
          ./perf(cmd_top+0xdc6) [0x43cb76]
          ./perf() [0x477223]
          ./perf(main+0x617) [0x422077]
          /lib64/libc.so.6(__libc_start_main+0xf0) [0x7ff806af8fe0]
          ./perf() [0x4221ed]
        Refcount -1 => 1 at
          ./perf(map_groups__exit+0x87) [0x4ba757]
          ./perf(map_groups__put+0x68) [0x4ba9a8]
          ./perf(thread__put+0x8b) [0x4c1aeb]
          ./perf(machine__delete_threads+0x81) [0x4b48f1]
          ./perf(perf_session__delete+0x4f) [0x4be63f]
          ./perf(cmd_top+0x1094) [0x43ce44]
          ./perf() [0x477223]
          ./perf(main+0x617) [0x422077]
          /lib64/libc.so.6(__libc_start_main+0xf0) [0x7ff806af8fe0]
          ./perf() [0x4221ed]
        ----
      
      This shows map_groups__clone get the map twice and put it when
      map_groups__exit.
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/20151209021120.10245.95388.stgit@localhost.localdomainSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      bae32b50
    • I
      perf tui: Change default selection background color to yellow · 8d7d377c
      Ingo Molnar 提交于
      Boris reported that 'perf top' is unusable on his default 'black on
      white' terminal, which uses (eye friendly) light-grey as a background
      color.
      
      The reason is that the TUI cursor for the current selection line uses
      HE_COLORSET_SELECTED, and that has a default background color of
      'lightgrey' - which is a common terminal background choice and thus
      the colors conflict.
      
      Use yellow as the background color instead: that should be an uncommon
      terminal background, yet it's still ergonomic on both black and
      white/grey terminals.
      
      [ It would be a better solution to straight out detect color
        collisions and resolve them reasonably by converting them to RGB and
        calculating color space distances, but I was unable to find
        proper documentation for SLtt_get_color_object() to recover the
        current color scheme so I gave up ... Yellow works well enough. ]
      Reported-and-Tested-by: NBorislav Petkov <bp@alien8.de>
      Signed-off-by: NIngo Molnar <mingo@kernel.org>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: David Binderman <dcb314@hotmail.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/20150305103213.GA23046@gmail.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      8d7d377c
  2. 08 12月, 2015 14 次提交
  3. 07 12月, 2015 5 次提交
    • W
      perf hists browser: Fix segfault if use symbol filter in cmdline · 4938cf0c
      Wang Nan 提交于
      If feed perf a symbol filter in cmdline and the result is empty,
      pressing 'Enter' in the hist browser causes crash:
      
       # ./perf report perf.data   <-- Common mistake for beginners
      
      Then press 'Enter':
      
       perf: Segmentation fault
       -------- backtrace --------
       /home/wangnan/perf[0x53e578]
       /lib64/libc.so.6(+0x3545f)[0x7f76bafe045f]
       /home/wangnan/perf[0x539dd4]
       /home/wangnan/perf(perf_evlist__tui_browse_hists+0x96)[0x53d216]
       /home/wangnan/perf(cmd_report+0x1b9f)[0x442c7f]
       /home/wangnan/perf[0x47efa2]
       /home/wangnan/perf(main+0x5f5)[0x432fa5]
       /lib64/libc.so.6(__libc_start_main+0xf4)[0x7f76bafccbd4]
       /home/wangnan/perf[0x4330d4]
      
      This is because 'perf.data' is interpreted as a symbol filter, and the
      result is empty, so selection is empty. However,
      hist_browser__toggle_fold() forgets to check it.
      
      This patch simply return false when selection is NULL.
      Signed-off-by: NWang Nan <wangnan0@huawei.com>
      Acked-by: NNamhyung Kim <namhyung@kernel.org>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1449455746-41952-2-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      4938cf0c
    • W
      perf hists browser: Reset selection when refresh · 979d2cac
      Wang Nan 提交于
      With the following steps:
      
       Step 1: perf report
      
       Step 2: Use UP/DOWN to select an entry, don't press 'ENTER'
      
       Step 3: Use '/' to filter symbols, use a filter which returns
               empty result
      
       Step 4: Press 'ENTER'
      
      We see that, even if we have filtered all the symbols (and the main
      interface is empty), pressing 'ENTER' still selects one symbol. This
      behavior surprises the user.
      
      This patch resets browser->{he_,}selection in hist_browser__refresh()
      and lets it choose default selection. In this case
      browser->{he_,}selection keeps NULL so user won't see annotation item in
      menu.
      Signed-off-by: NWang Nan <wangnan0@huawei.com>
      Acked-by: NNamhyung Kim <namhyung@kernel.org>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1449455746-41952-4-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      979d2cac
    • W
      perf hists browser: Add NULL pointer check to prevent crash · 837eeb75
      Wang Nan 提交于
      Before this patch we can trigger a segfault by following steps:
      
       Step 0: Use 'perf record' to generate a perf.data without callchain
      
       Step 1: perf report
      
       Step 2: Use UP/DOWN to select an entry, don't press 'ENTER'
      
       Step 3: Use '/' to filter symbols, use a filter which returns
               empty result
      
       Step 4: Press 'ENTER' (notice here that the old selection is still
      		        there. This is another problem)
      
       Step 5: Press 'ENTER' to annotate that symbol
      
       Step 6: Press 'LEFT' to go out.
      
       Result: segfault:
      
       perf: Segmentation fault
       -------- backtrace --------
       /home/wangnan/perf[0x53e568]
       /lib64/libc.so.6(+0x3545f)[0x7fba75d3245f]
       /home/wangnan/perf[0x537516]
       /home/wangnan/perf[0x533fef]
       /home/wangnan/perf[0x53b347]
       /home/wangnan/perf(perf_evlist__tui_browse_hists+0x96)[0x53d206]
       /home/wangnan/perf(cmd_report+0x1b9f)[0x442c7f]
       /home/wangnan/perf[0x47efa2]
       /home/wangnan/perf(main+0x5f5)[0x432fa5]
       /lib64/libc.so.6(__libc_start_main+0xf4)[0x7fba75d1ebd4]
       /home/wangnan/perf[0x4330d4]
      
      This is because in this case 'nd' could be NULL in
      ui_browser__hists_seek(), but that function never checks it.
      
      This patch adds checker for potential NULL pointer in that function.
      After this patch the above steps won't segfault.
      Signed-off-by: NWang Nan <wangnan0@huawei.com>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1449455746-41952-3-git-send-email-wangnan0@huawei.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      837eeb75
    • M
      perf buildid-list: Fix return value of perf buildid-list -k · c8319c9d
      Michael Petlan 提交于
      The buildid string length is returned by perf buildid-list -k command.
      Since a non-zero return value means an error, perf buildid-list -k cmd
      should return 0 when successful instead.
      
      Before:
      
      	# perf buildid-list -k
      	39356d74e96e02346fe0ec1f3f162b6c522bac62
      	# echo $?
      	41
      
      After:
      
      	# perf buildid-list -k
      	39356d74e96e02346fe0ec1f3f162b6c522bac62
      	# echo $?
      	0
      Signed-off-by: NMichael Petlan <mpetlan@redhat.com>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Fixes: 0b5a7935 ("perf buildid: Introduce sysfs/filename__sprintf_build_id")
      LPU-Reference: 1449080871.24573.145.camel@redhat.com
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      c8319c9d
    • M
      perf buildid-list: Show running kernel build id fix · 7375e151
      Michael Petlan 提交于
      The --kernel option of perf buildid-list tool should show the running
      kernel buildid.  The functionality has been lost during other changes of
      the related code.
      
      The build_id__sprintf() function should return length of the build-id
      string,  but it was the length of the build-id raw data instead. Due to
      that, some return value checking caused that the final string was not
      printed out.
      
      With this patch the build_id__sprintf() returns the correct value, so
      the --kernel option works again.
      
      Before:
      
      	# perf buildid-list --kernel
      	#
      
      After:
      
      	# perf buildid-list --kernel
      	972c1edab5bdc06cc224af45d510af662a3c6972
      	#
      Signed-off-by: NMichael Petlan <mpetlan@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      LPU-Reference: 1448632089.24573.114.camel@redhat.com
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      7375e151
  4. 28 11月, 2015 9 次提交
  5. 27 11月, 2015 10 次提交
    • M
      perf buildid-list: Show running kernel build id fix · c4e07949
      Michael Petlan 提交于
      The --kernel option of perf buildid-list tool should show the running
      kernel buildid.  The functionality has been lost during other changes of
      the related code.
      
      The build_id__sprintf() function should return length of the build-id
      string,  but it was the length of the build-id raw data instead. Due to
      that, some return value checking caused that the final string was not
      printed out.
      
      With this patch the build_id__sprintf() returns the correct value, so
      the --kernel option works again.
      
      Before:
      
      	# perf buildid-list --kernel
      	#
      
      After:
      
      	# perf buildid-list --kernel
      	972c1edab5bdc06cc224af45d510af662a3c6972
      	#
      Signed-off-by: NMichael Petlan <mpetlan@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      LPU-Reference: 1448632089.24573.114.camel@redhat.com
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      c4e07949
    • H
      bpf tools: Add helper function for updating bpf maps elements · 43798bf3
      He Kuang 提交于
      Add bpf_map_update_elem() helper function which calls the sys_bpf
      syscall to update elements in bpf maps. Upcoming patches will use it to
      adjust data in map through the perf command line.
      Signed-off-by: NHe Kuang <hekuang@huawei.com>
      Cc: Alexei Starovoitov <ast@kernel.org>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1448372181-151723-4-git-send-email-wangnan0@huawei.comSigned-off-by: NWang Nan <wangnan0@huawei.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      43798bf3
    • J
      perf evlist: Display WEIGHT sample type bit · dcdd184b
      Jiri Olsa 提交于
      Adding WIEGHT bit_name call to display sample_type properly.
      
        $ perf evlist -v
        cpu/mem-loads/pp: ...SNIP... sample_type: IP|TID|TIME|ADDR|ID|CPU|DATA_SRC|WEIGHT ...
      Signed-off-by: NJiri Olsa <jolsa@kernel.org>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/1448465815-27404-2-git-send-email-jolsa@kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      dcdd184b
    • J
      perf stat: Clear sample_(type|period) for counting · 6acd8e92
      Jiri Olsa 提交于
      Clear sample_(type|period) for counting, as it only confuses debug
      output with unwanted sampling details:
      
      Before:
      
        $ sudo perf stat -e 'raw_syscalls:sys_enter' -vv ls
        ------------------------------------------------------------
        perf_event_attr:
          type                             2
          size                             112
          config                           0x11
          { sample_period, sample_freq }   1
          sample_type                      TIME|CPU|PERIOD|RAW
          read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
          disabled                         1
          inherit                          1
          enable_on_exec                   1
          exclude_guest                    1
        ...
      
      After:
        $ sudo perf stat -e 'raw_syscalls:sys_enter' -vv ls
        ------------------------------------------------------------
        perf_event_attr:
          type                             2
          size                             112
          config                           0x11
          read_format                      TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING
          disabled                         1
          inherit                          1
          enable_on_exec                   1
          exclude_guest                    1
        ...
      Signed-off-by: NJiri Olsa <jolsa@kernel.org>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/1448465815-27404-1-git-send-email-jolsa@kernel.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      6acd8e92
    • E
      perf symbols: Add the path to vmlinux.debug · f55ae954
      Ekaterina Tumanova 提交于
      Currently when debuginfo is separated to vmlinux.debug, it's contents
      get ignored. Let's change that and add it to the vmlinux_path list.
      Signed-off-by: NEkaterina Tumanova <tumanova@linux.vnet.ibm.com>
      Acked-by: NAlexander Yarygin <yarygin@linux.vnet.ibm.com>
      Acked-by: NJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/1448469166-61363-3-git-send-email-tumanova@linux.vnet.ibm.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      f55ae954
    • E
      perf symbols: Refactor vmlinux_path__init() to ease path additions · aac48647
      Ekaterina Tumanova 提交于
      Refactor vmlinux_path__init() to ease subsequent additions of new
      vmlinux locations.
      Signed-off-by: NEkaterina Tumanova <tumanova@linux.vnet.ibm.com>
      Acked-by: NAlexander Yarygin <yarygin@linux.vnet.ibm.com>
      Acked-by: NJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Christian Borntraeger <borntraeger@de.ibm.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/1448469166-61363-2-git-send-email-tumanova@linux.vnet.ibm.com
      [ Rename vmlinux_path__update() to vmlinux_path__add() ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      aac48647
    • J
      tools build: Use fixdep with OUTPUT path prefix · 5e50426d
      Jiri Olsa 提交于
      Adding OUTPUT path prefix for fixdep target so we use it properly in out
      of tree builds.
      
      If the fixdep already existed in the tree, the out of tree build would
      see it already exist and did not build the out of tree version, as
      reported by Arnaldo:
      
        [acme@zoo linux]$ make O=/tmp/build/perf -C tools/perf
        make: Entering directory '/home/git/linux/tools/perf'
          BUILD:   Doing 'make -j4' parallel build
        make[2]: Nothing to be done for 'fixdep'.
        make: Leaving directory '/home/git/linux/tools/perf'
      Reported-and-Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NJiri Olsa <jolsa@kernel.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/20151126185055.GC19410@krava.brq.redhat.com
      [ Fixed conflict with 5725dd8f ("tools build: Clean CFLAGS and LDFLAGS for fixdep") ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      5e50426d
    • J
      perf script: Pass perf_script into process_event · 809e9423
      Jiri Olsa 提交于
      Passing perf_script struct into process_event function, so we could
      process configuration data for event printing.
      
      It will be used in following patch to get event name string width.
      Signed-off-by: NJiri Olsa <jolsa@kernel.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/20151126175521.GA18979@krava.brq.redhat.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      809e9423
    • Y
      perf tools: Correctly identify anon_hugepage when generating map (v2) · b2be5451
      Yannick Brosseau 提交于
      When parsing /proc/xxx/maps, the sscanf in perf_event__synthesize_mmap_events
      truncate the map name at the space in "/anon_hugepage (deleted)".
      
      is_anon_memory() then only receives the string "/anon_hugepage" and does
      not detect it.  We change is_anon_memory() to only compare the first
      part of the string, effectively ignoring if " (deleted)" is there.
      Signed-off-by: NYannick Brosseau <scientist@fb.com>
      Tested-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Joshua Zhu <zhu.wen-jie@hp.com>
      Cc: kernel-team@fb.com
      Link: http://lkml.kernel.org/r/1448538152-2898-1-git-send-email-scientist@fb.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      b2be5451
    • W
      perf machine: Adjust dso->long_name for offline module · c03d5184
      Wang Nan 提交于
      Something unexpected may happen if copy statically linked perf to a
      production environment:
      
        # ./perf probe -m ./mymodule.ko my_func
        [mymodule] with build id 326ab42550ef3d24944f53c817533728367effeb not found, continuing without symbols
        Failed to find symbol my_func in /home/wangnan/kmodule/mymodule.ko
          Error: Failed to add events.
        # ./perf buildid-cache -a ./mymodule.ko
        # ./perf probe -m ./mymodule.ko my_func
        Added new event:
          probe:my_func        (on my_func in /home/wangnan/kmodule/mymodule.ko)
      
        You can now use it in all perf tools, such as:
      
        	perf record -e probe:my_func -aR sleep 1
      
      Where:
      
        # ldd ./perf
       	not a dynamic executable
        # strace -e open ./perf probe -m ./mymodule.ko my_func
        ...
        open("/home/wangnan/kmodule/mymodule.ko", O_RDONLY) = 3
        open("/home/wangnan/kmodule/../lib64/elfutils/libebl_x86_64.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        ...
        open("/lib64/tls/libebl_x86_64.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        open("/lib64/libebl_x86_64.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        open("/usr/lib64/tls/libebl_x86_64.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        open("/usr/lib64/libebl_x86_64.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
        open("[mymodule]", O_RDONLY)            = -1 ENOENT (No such file or directory)
        open("/home/wangnan/.debug/.build-id/32/6ab42550ef3d24944f53c817533728367effeb", O_RDONLY) = -1 ENOENT (No such file or directory)
        open("[mymodule]", O_RDONLY)            = -1 ENOENT (No such file or directory)
      
      In the above example, probe fails before we put the module into
      buildid-cache. However, user would expect it success in both case
      because perf is able to find probe points actually.
      
      The reason is because perf won't utilize module's full path if it failed
      to open debuginfo. In:
      
           convert_to_probe_trace_events ->
              find_probe_trace_events_from_map ->
                  get_target_map ->
                      kernel_get_module_map ->
                          machine__findnew_module_map ->
                              map_groups__find_by_name
      
      map_groups__find_by_name() is able to find the map of that module, but
      this information is found from /proc/module before it knows the real
      path of the offline module. Therefore, the map->dso->long_name is set to
      something like '[mymodule]', which prevent dso__load() find the real
      path of the module file.
      
      In another aspect, if dso__load() can get the offline module through
      buildid cache, it can read symble table from that ko. Even if debuginfo
      is not available, 'perf probe' can success if the '.symtab' can be
      found.
      
      This patch improves machine__findnew_module_map(): when dso->long_name
      is leading with '[' (doesn't find path of module when parsing
      /proc/modules), fixes it by dso__set_long_name(), so following
      dso__load() is possible to find the symbol table.
      
      This patch won't interfere with buildid matching. Here is the test
      result:
      
        # ./perf probe -m ./mymodule.ko my_func
        Added new event:
          probe:my_func        (on my_func in /home/wangnan/kmodule/mymodule.ko)
      
        You can now use it in all perf tools, such as:
      
        	perf record -e probe:my_func -aR sleep 1
      
        # ./perf probe -d '*'
        Removed event: probe:my_func
        # mv ./mymodule.{ko,.bak}
        # mv ./moduleb.ko mymodule.ko
        # ./perf probe -m ./mymodule.ko my_func
        /home/wangnan/kmodule/mymodule.ko with build id 326ab42550ef3d24944f53c817533728367effeb not found, continuing without symbols
        Failed to find symbol my_func in /home/wangnan/kmodule/mymodule.ko
          Error: Failed to add events.
      
        # ./perf probe -v -m ./mymodule.ko my_func
        probe-definition(0): my_func
        symbol:my_func file:(null) line:0 offset:0 return:0 lazy:(null)
        0 arguments
        Could not open debuginfo. Try to use symbols.
        symsrc__init: build id mismatch for /home/wangnan/kmodule/mymodule.ko.
        /home/wangnan/kmodule/mymodule.ko with build id 326ab42550ef3d24944f53c817533728367effeb not found, continuing without symbols
        Failed to find symbol my_func in /home/wangnan/kmodule/mymodule.ko
          Error: Failed to add events. Reason: No such file or directory (Code: -2)
      Signed-off-by: NWang Nan <wangnan0@huawei.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Zefan Li <lizefan@huawei.com>
      Cc: pi3orama@163.com
      Link: http://lkml.kernel.org/r/1448510397-187965-1-git-send-email-wangnan0@huawei.com
      [ Renamed adjust_dso_long_name() do dso__adjust_kmod_long_name() ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      c03d5184