1. 10 12月, 2015 6 次提交
    • M
      perf machine: Fix machine.vmlinux_maps to make sure to clear the old one · cc1121ab
      Masami Hiramatsu 提交于
      Fix machine.vmlinux_maps to make sure to clear the old one if it is
      renewal. This can leak the previous maps on the vmlinux_maps because
      those are just overwritten.
      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/20151209021133.10245.93730.stgit@localhost.localdomain
      [ Simplified the memset, same end result ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      cc1121ab
    • M
      perf tools: Fix maps__fixup_overlappings to put used maps · d91130e9
      Masami Hiramatsu 提交于
      Since the __map_groups__insert got the given map, we don't need to keep
      it. So put the maps.
      
      Refcnt debugger shows that map_groups__fixup_overlappings() got a map
      twice but the group released it just once. This pattern usually
      indicates the leak happens in caller site.
      
        ----
        ==== [0] ====
        Unreclaimed map@0x39d3ae0
        Refcount +1 => 1 at
          ./perf(map_groups__fixup_overlappings+0x335) [0x4c1865]
          ./perf(thread__insert_map+0x30) [0x4c8e00]
          ./perf(machine__process_mmap2_event+0x106) [0x4bd876]
          ./perf() [0x4c378e]
          ./perf() [0x4c4393]
          ./perf(perf_session__process_events+0x38a) [0x4c654a]
          ./perf(cmd_record+0xe24) [0x42fc94]
          ./perf() [0x47b745]
          ./perf(main+0x617) [0x422547]
          /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f2eca2deaf5]
          ./perf() [0x4226bd]
        Refcount +1 => 2 at
          ./perf(map_groups__fixup_overlappings+0x3c5) [0x4c18f5]
          ./perf(thread__insert_map+0x30) [0x4c8e00]
          ./perf(machine__process_mmap2_event+0x106) [0x4bd876]
          ./perf() [0x4c378e]
          ./perf() [0x4c4393]
          ./perf(perf_session__process_events+0x38a) [0x4c654a]
          ./perf(cmd_record+0xe24) [0x42fc94]
          ./perf() [0x47b745]
          ./perf(main+0x617) [0x422547]
          /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f2eca2deaf5]
          ./perf() [0x4226bd]
        Refcount -1 => 1 at
          ./perf(map_groups__exit+0x92) [0x4c0962]
          ./perf(map_groups__put+0x60) [0x4c0bc0]
          ./perf(thread__put+0x90) [0x4c8a40]
          ./perf(machine__delete_threads+0x7e) [0x4bad9e]
          ./perf(perf_session__delete+0x4f) [0x4c499f]
          ./perf(cmd_record+0xb6d) [0x42f9dd]
          ./perf() [0x47b745]
          ./perf(main+0x617) [0x422547]
          /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f2eca2deaf5]
          ./perf() [0x4226bd]
        ----
      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/20151209021131.10245.41485.stgit@localhost.localdomainSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      d91130e9
    • M
      perf hists: Fix hists_evsel to release hists · 17577dec
      Masami Hiramatsu 提交于
      Since hists__init doesn't set the destructor of hists_evsel (which is an
      extended evsel structure), when hists_evsel is released, the extended
      part of the hists_evsel is not deleted (note that the hists_evsel object
      itself is freed).
      
      This fixes it to add a destructor for hists__evsel and to set it up.
      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/20151209021129.10245.28710.stgit@localhost.localdomainSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      17577dec
    • M
      perf stat: Fix cmd_stat to release cpu_map · 544c2ae7
      Masami Hiramatsu 提交于
      Fix cmd_stat() to release cpu_map objects (aggr_map and
      cpus_aggr_map) afterwards.
      
      refcnt debugger shows that the cmd_stat initializes cpu_map
      but not puts it.
        ----
        # ./perf stat -v ls
        ....
        REFCNT: BUG: Unreclaimed objects found.
        ==== [0] ====
        Unreclaimed cpu_map@0x29339c0
        Refcount +1 => 1 at
          ./perf(cpu_map__empty_new+0x6d) [0x4e64bd]
          ./perf(cmd_stat+0x5fe) [0x43594e]
          ./perf() [0x47b785]
          ./perf(main+0x617) [0x422587]
          /lib64/libc.so.6(__libc_start_main+0xf5) [0x7f2dff420af5]
          ./perf() [0x4226fd]
        REFCNT: Total 1 objects are not reclaimed.
          "cpu_map" leaks 1 objects
        ----
      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/20151209021127.10245.93697.stgit@localhost.localdomain
      [ Remove NULL checks before calling the put operation, it checks it already ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      544c2ae7
    • 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 17 次提交
  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. 06 12月, 2015 10 次提交
  5. 04 12月, 2015 1 次提交
  6. 28 11月, 2015 1 次提交
    • I
      Merge tag 'perf-core-for-mingo' of... · ac675d0d
      Ingo Molnar 提交于
      Merge tag 'perf-core-for-mingo' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core
      
      Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo:
      
      User visible changes:
      
        - Fix 'perf list' segfault due to lack of support for PERF_CONF_SW_BPF_OUTPUT
          in an array used just for printing available events, robustify the code
          involved (Arnaldo Carvalho de Melo)
      
        - 'perf test unwind' should create kernel maps, now that entry works and the
          test passes (Jiri Olsa)
      
        - Fix showing the running kernel build id in 'perf buildid-list' (Michael Petlan)
      
        - Fix command line symbol filtering in 'perf report' (Namhyung Kim)
      
      Infrastructure changes:
      
        - Extract and collect map info from BPF object files in libbpf (Wang Nan)
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NIngo Molnar <mingo@kernel.org>
      ac675d0d