1. 27 12月, 2013 1 次提交
  2. 26 12月, 2013 1 次提交
    • M
      perf probe: Support basic dwarf-based operations on uprobe events · fb7345bb
      Masami Hiramatsu 提交于
      Support basic dwarf(debuginfo) based operations for uprobe events.  With
      this change, perf probe can analyze debuginfo of user application binary
      to set up new uprobe event.
      
      This allows perf-probe --add(with local variables, line numbers) and
      --line works with -x option.  (Actually, --vars has already accepted -x
      option)
      
      For example, the following command shows the probe-able lines of a given
      user space function. Something that so far was only available in the
      'perf probe' tool for kernel space functions:
      
        # ./perf probe -x perf --line map__load
        <map__load@/home/fedora/ksrc/linux-2.6/tools/perf/util/map.c:0>
              0  int map__load(struct map *map, symbol_filter_t filter)
              1  {
              2         const char *name = map->dso->long_name;
                        int nr;
      
              5         if (dso__loaded(map->dso, map->type))
              6                 return 0;
      
              8         nr = dso__load(map->dso, map, filter);
              9         if (nr < 0) {
             10                 if (map->dso->has_build_id) {
      
      And this shows the available variables at the given line of the
      function.
      
        # ./perf probe -x perf --vars map__load:8
        Available variables at map__load:8
                @<map__load+96>
                        char*   name
                        struct map*     map
                        symbol_filter_t filter
                @<map__find_symbol+112>
                        char*   name
                        symbol_filter_t filter
                @<map__find_symbol_by_name+136>
                        char*   name
                        symbol_filter_t filter
                @<map_groups__find_symbol_by_name+176>
                        char*   name
                        struct map*     map
                        symbol_filter_t filter
      
      And lastly, we can now define probe(s) with all available
      variables on the given line:
      
        # ./perf probe -x perf --add 'map__load:8 $vars'
      
        Added new events:
          probe_perf:map__load (on map__load:8 with $vars)
          probe_perf:map__load_1 (on map__load:8 with $vars)
          probe_perf:map__load_2 (on map__load:8 with $vars)
          probe_perf:map__load_3 (on map__load:8 with $vars)
      
        You can now use it in all perf tools, such as:
      
                perf record -e probe_perf:map__load_3 -aR sleep 1
      
        Changes from previous version:
         - Add examples in the patch description.
         - Use .text section start address and dwarf symbol address
           for calculating the offset of given symbol, instead of
           searching the symbol in symtab again.
           With this change, we can safely handle multiple local
           function instances (e.g. scnprintf in perf).
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: David A. Long <dave.long@linaro.org>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Oleg Nesterov <oleg@redhat.com>
      Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: systemtap@sourceware.org
      Cc: yrl.pp-manager.tt@hitachi.com
      Link: http://lkml.kernel.org/r/20131226054152.22364.47021.stgit@kbuild-fedora.novalocalSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      fb7345bb
  3. 06 11月, 2013 1 次提交
  4. 04 11月, 2013 1 次提交
  5. 23 10月, 2013 2 次提交
  6. 16 10月, 2013 1 次提交
  7. 05 10月, 2013 1 次提交
    • M
      perf probe: Fix to find line information for probe list · e08cfd4b
      Masami Hiramatsu 提交于
      Fix to find the correct (as much as possible) line information for
      listing probes. Without this fix, perf probe --list action will show
      incorrect line information as below;
      
        probe:getname_flags  (on getname_flags@ksrc/linux-3/fs/namei.c)
        probe:getname_flags_1 (on getname:-89@x86/include/asm/current.h)
        probe:getname_flags_2 (on user_path_at_empty:-2054@x86/include/asm/current.h)
      
      The minus line number is obviously wrong, and current.h is not related
      to the probe point. Deeper investigation discovered that there were 2
      issues related to this bug, and minor typos too.
      
      The 1st issue is the rack of considering about nested inlined functions,
      which causes the wrong (relative) line number.
      
      The 2nd issue is that the dwarf line info is not correct at those
      points. It points 14th line of current.h.
      
      Since it seems that the line info includes somewhat unreliable
      information, this fixes perf to try to find correct line information
      from both of debuginfo and line info as below.
      
      1) Probe address is the entry of a function instance
      
        In this case, the line is set as the function declared line.
      
      2) Probe address is the entry of an expanded inline function block
      
        In this case, the line is set as the function call-site line.
        This means that the line number is relative from the entry line
        of caller function (which can be an inlined function if nested)
      
      3) Probe address is inside a function instance or an expanded
         inline function block
      
        In this case, perf probe queries the line number from lineinfo
        and verify the function declared file is same as the file name
        queried from lineinfo.
      
        If the file name is different, it is a failure case. The probe
        address is shown as symbol+offset.
      
      4) Probe address is not in the any function instance
      
        This is a failure case, the probe address is shown as
        symbol+offset.
      
      With this fix, perf probe -l shows correct probe lines as below;
      
        probe:getname_flags  (on getname_flags@ksrc/linux-3/fs/namei.c)
        probe:getname_flags_1 (on getname:2@ksrc/linux-3/fs/namei.c)
        probe:getname_flags_2 (on user_path_at_empty:4@ksrc/linux-3/fs/namei.c)
      
      Changes at v2:
       - Fix typos in the function comments. (Thanks to Namhyung Kim)
       - Use die_find_top_inlinefunc instead of die_find_inlinefunc_next.
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/20130930092144.1693.11058.stgit@udc4-manage.rcp.hitachi.co.jpSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      e08cfd4b
  8. 25 9月, 2013 1 次提交
    • M
      perf probe: Fix probing symbols with optimization suffix · 576b5237
      Masami Hiramatsu 提交于
      Fix perf probe to probe on some symbols which have some optimzation
      suffixes, e.g. ".part", ".isra", and ".constprop".
      
      To fix this issue, instead of using the DIE name, perf probe uses the
      symbol name found by dwfl_module_addrsym().
      
      This also involves a perf probe --vars operation update which now shows
      the symbol name instead of the DIE name.
      
      Without this patch, putting a probe on an inlined function which was
      compiled with a suffixed symbol will fail like this:
      
        $ perf probe -v getname_flags
        probe-definition(0): getname_flags
        symbol:getname_flags file:(null) line:0 offset:0 return:0 lazy:(null)
        0 arguments
        Looking at the vmlinux_path (6 entries long)
        Using /lib/modules/3.11.0+/build/vmlinux for symbols
        found inline addr: 0xffffffff8119bb70
        Probe point found: getname_flags+0
        found inline addr: 0xffffffff8119bcb6
        Probe point found: getname+6
        found inline addr: 0xffffffff811a06a6
        Probe point found: user_path_at_empty+6
        find 3 probe_trace_events.
        Opening /sys/kernel/debug//tracing/kprobe_events write=1
        Added new events:
        Writing event: p:probe/getname_flags getname_flags+0
        Failed to write event: No such file or directory
          Error: Failed to add events. (-1)
      
      Because the debuginfo knows only the original (non suffix) symbol name,
      it uses the original symbol for probe address but the kernel (kallsyms)
      knows only suffixed symbol.  Then, the kernel rejects that original
      symbol.
      
      This patch uses dwfl_module_addrsym() to get the correct (suffixed)
      symbol from symtab when a probe point is found.
      Reported-by: NArnaldo Carvalho de Melo <acme@ghostprotocols.net>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Link: http://lkml.kernel.org/r/20130925131616.31632.46658.stgit@udc4-manage.rcp.hitachi.co.jpSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      576b5237
  9. 19 9月, 2013 1 次提交
  10. 25 1月, 2013 1 次提交
  11. 15 9月, 2012 1 次提交
  12. 11 9月, 2012 1 次提交
    • I
      perf tools: Use __maybe_used for unused variables · 1d037ca1
      Irina Tirdea 提交于
      perf defines both __used and __unused variables to use for marking
      unused variables. The variable __used is defined to
      __attribute__((__unused__)), which contradicts the kernel definition to
      __attribute__((__used__)) for new gcc versions. On Android, __used is
      also defined in system headers and this leads to warnings like: warning:
      '__used__' attribute ignored
      
      __unused is not defined in the kernel and is not a standard definition.
      If __unused is included everywhere instead of __used, this leads to
      conflicts with glibc headers, since glibc has a variables with this name
      in its headers.
      
      The best approach is to use __maybe_unused, the definition used in the
      kernel for __attribute__((unused)). In this way there is only one
      definition in perf sources (instead of 2 definitions that point to the
      same thing: __used and __unused) and it works on both Linux and Android.
      This patch simply replaces all instances of __used and __unused with
      __maybe_unused.
      Signed-off-by: NIrina Tirdea <irina.tirdea@intel.com>
      Acked-by: NPekka Enberg <penberg@kernel.org>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Namhyung Kim <namhyung.kim@lge.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Link: http://lkml.kernel.org/r/1347315303-29906-7-git-send-email-irina.tirdea@intel.com
      [ committer note: fixed up conflict with a116e05d in builtin-sched.c ]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      1d037ca1
  13. 28 3月, 2012 1 次提交
  14. 01 3月, 2012 1 次提交
  15. 31 1月, 2012 1 次提交
  16. 24 9月, 2011 1 次提交
  17. 12 8月, 2011 5 次提交
    • M
      perf probe: Search concrete out-of-line instances · db0d2c64
      Masami Hiramatsu 提交于
      gcc 4.6 generates a concrete out-of-line instance when there is a
      function which is implicitly inlined somewhere but also has its own
      instance. The concrete out-of-line instance means that it has an
      abstract origin of the function which is referred by not only
      inlined-subroutines but also a concrete subprogram.
      
      Since current dwarf_func_inline_instances() can find only instances of
      inlined-subroutines, this introduces new die_walk_instances() to find
      both of subprogram and inlined-subroutines.
      
      e.g. without this,
      Available variables at sched_group_rt_period
              @<cpu_rt_period_read_uint+9>
                      struct task_group*      tg
      
      perf probe failed to find actual subprogram instance of
      sched_group_rt_period().
      
      With this,
      
      Available variables at sched_group_rt_period
              @<cpu_rt_period_read_uint+9>
                      struct task_group*      tg
              @<sched_group_rt_period+0>
                      struct task_group*      tg
      
      Now it found the sched_group_rt_period() itself.
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: yrl.pp-manager.tt@hitachi.com
      Link: http://lkml.kernel.org/r/20110811110311.19900.63997.stgit@fedora15Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      db0d2c64
    • M
      perf probe: Avoid searching variables in intermediate scopes · f182e3e1
      Masami Hiramatsu 提交于
      Fix variable searching logic to search one in inner than local scope or
      global(CU) scope. In the other words, skip searching in intermediate
      scopes.
      
      e.g., in the following code,
      
      int var1;
      
      void inline infunc(int i)
      {
          i++;   <--- [A]
      }
      
      void func(void)
      {
         int var1, var2;
         infunc(var2);
      }
      
      At [A], "var1" should point the global variable "var1", however, if user
      mis-typed as "var2", variable search should be failed. However, current
      logic searches variable infunc() scope, global scope, and then func()
      scope. Thus, it can find "var2" variable in func() scope. This may not
      be what user expects.
      
      So, it would better not search outer scopes except outermost (compile
      unit) scope which contains only global variables, when it failed to find
      given variable in local scope.
      
      E.g.
      
      Without this:
      $ perf probe -V pre_schedule --externs > without.vars
      
      With this:
      $ perf probe -V pre_schedule --externs > with.vars
      
      Check the diff:
      $ diff without.vars with.vars
      88d87
      <               int     cpu
      133d131
      <               long unsigned int*      switch_count
      
      These vars are actually in the scope of schedule(), the caller of
      pre_schedule().
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: yrl.pp-manager.tt@hitachi.com
      Link: http://lkml.kernel.org/r/20110811110305.19900.94374.stgit@fedora15Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      f182e3e1
    • M
      perf probe: Fix to search local variables in appropriate scope · 221d0611
      Masami Hiramatsu 提交于
      Fix perf probe to search local variables in appropriate local inlined
      function scope. For example, pre_schedule() has only 2 local variables,
      as below;
      
      $ perf probe -L pre_schedule
      <pre_schedule@/home/mhiramat/ksrc/linux-2.6/kernel/sched.c:0>
            0  static inline void pre_schedule(struct rq *rq, struct task_struct *prev)
               {
            2         if (prev->sched_class->pre_schedule)
            3                 prev->sched_class->pre_schedule(rq, prev);
               }
      
      However, current perf probe shows 4 local variables on pre_schedule(),
      because it searches variables in the caller(schedule()) scope.
      
      $ perf probe -V pre_schedule
      Available variables at pre_schedule
              @<schedule+445>
                      int     cpu
                      long unsigned int*      switch_count
                      struct rq*      rq
                      struct task_struct*     prev
      
      This patch fixes this issue by searching variables in the local scope of
      the instance of inlined function. Here is the result.
      
      $ perf probe -V pre_schedule
      Available variables at pre_schedule
              @<schedule+445>
                      struct rq*      rq
                      struct task_struct*     prev
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: yrl.pp-manager.tt@hitachi.com
      Link: http://lkml.kernel.org/r/20110811110259.19900.85664.stgit@fedora15Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      221d0611
    • M
      perf probe: Fix to walk all inline instances · 36c0c588
      Masami Hiramatsu 提交于
      Fix line-range collector to walk all instances of inlined function,
      because some execution paths can be optimized out depending on the
      function argument of instances.
      
      E.g.)
      inline_func (arg) {
      	if (arg)
      		do_something;
      	else
      		do_another;
      }
      
      func_A() {
      	inline_func(1)
      }
      
      func_B() {
      	inline_func(0)
      }
      
      In this case, func_A may have only do_something code and func_B may have
      only do_another.
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Masami Hiramatsu <masami.hiramatsu@gmail.com>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: yrl.pp-manager.tt@hitachi.com
      Link: http://lkml.kernel.org/r/20110811110247.19900.93702.stgit@fedora15Signed-off-by: NMasami Hiramatsu <masami.hiramatsu@gmail.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      36c0c588
    • M
      perf probe: Fix a memory leak for scopes array · 8afa2a70
      Masami Hiramatsu 提交于
      Fix a memory leak for scopes array when it finds a variable in the
      global scope.
      Reviewed-by: NPekka Enberg <penberg@kernel.org>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Pekka Enberg <penberg@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: yrl.pp-manager.tt@hitachi.com
      Link: http://lkml.kernel.org/r/20110811110229.19900.63019.stgit@fedora15Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      8afa2a70
  18. 16 7月, 2011 5 次提交
  19. 10 5月, 2011 1 次提交
  20. 06 4月, 2011 4 次提交
    • M
      perf probe: Fix listing incorrect line number with inline function · 1d46ea2a
      Masami Hiramatsu 提交于
      Fix a bug showing incorrect line number when a probe is put on the head of an
      inline function. This patch updates find_perf_probe_point() and introduces new
      rules to get correct line number.
      
       - If debuginfo doesn't have a correct file name, we shouldn't return line
         number too, because, without file name, line number is meaningless.
      
       - If the address is in a function, it stores the function name and the offset
         from the function entry.
      
         - If the address is on a line, it tries to get the relative line number from
           the function entry line, except for the address is same as the entry
           address of the function (in this case, the relative line number should
           be 0).
      
           - If the address is in an inline function entry (call-site), it uses the
             inline function call line number as the line on which the address is.
      
         - If the address is in an inline function body, it stores the inline
           function name and offset from the inline function call site instead of the
           (non-inlined) function.
      
      Cc: 2nddept-manager@sdl.hitachi.co.jp
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Lin Ming <ming.m.lin@intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      LKML-Reference: <20110330092605.2132.11629.stgit@ltc236.sdl.hitachi.co.jp>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      1d46ea2a
    • M
      perf probe: Fix to find recursively inlined function · 1d878083
      Masami Hiramatsu 提交于
      Fix die_find_inlinefunc() to return correct innermost inlined function
      at given address. Without this fix, it returns the outermost inlined
      function.
      
      Cc: 2nddept-manager@sdl.hitachi.co.jp
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Lin Ming <ming.m.lin@intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      LKML-Reference: <20110330092559.2132.78634.stgit@ltc236.sdl.hitachi.co.jp>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      1d878083
    • M
      perf probe: Fix to remove redundant close · f0c4801a
      Masami Hiramatsu 提交于
      Since dwfl_end() closes given fd with dwfl, caller doesn't need to close its fd
      when finishing process.
      
      Cc: 2nddept-manager@sdl.hitachi.co.jp
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Lin Ming <ming.m.lin@intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      LKML-Reference: <20110330092547.2132.93728.stgit@ltc236.sdl.hitachi.co.jp>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      f0c4801a
    • M
      perf probe: Fix to ensure function declared file · 7d21635a
      Masami Hiramatsu 提交于
      Fix to ensure function declared file matches given file name. This fixes
      a potential bug.
      
      As I've commented on Lin Ming's fastpath enhancement, decl_file should
      be checked on each probe point if user gives a probe point as func@file.
      
      Cc: 2nddept-manager@sdl.hitachi.co.jp
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Lin Ming <ming.m.lin@intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      LKML-Reference: <20110330092541.2132.3584.stgit@ltc236.sdl.hitachi.co.jp>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      7d21635a
  21. 30 3月, 2011 1 次提交
    • L
      perf probe: Add fastpath to do lookup by function name · cd25f8bc
      Lin Ming 提交于
      v3 -> v2:
      - Make pubname_search_cb more generic
      - Add fastpath to find_probes also
      
      v2 -> v1:
      - Don't compare file names with cu_find_realpath(...), instead, compare
        them with the name returned by dwarf_decl_file(sp_die)
      
      The vmlinux file may have thousands of CUs.
      We can lookup function name from .debug_pubnames section
      to avoid the slow loop on CUs.
      
      1. Improvement data for find_line_range
      
      ./perf stat -e cycles -r 10 -- ./perf probe -k /home/mlin/vmlinux \
              -s /home/mlin/linux-2.6 \
              --line csum_partial_copy_to_user > tmp.log
      
      before patch applied
      =====================
             847,988,276 cycles
      
              0.355075856  seconds time elapsed
      
      after patch applied
      =====================
             206,102,622 cycles
      
              0.086883555  seconds time elapsed
      
      2. Improvement data for find_probes
      
      ./perf stat -e cycles -r 10 -- ./perf probe -k /home/mlin/vmlinux \
              -s /home/mlin/linux-2.6 \
              --vars csum_partial_copy_to_user > tmp.log
      
      before patch applied
      =====================
             848,490,844 cycles
      
              0.355307901  seconds time elapsed
      
      after patch applied
      =====================
             205,684,469 cycles
      
              0.086694010  seconds time elapsed
      Acked-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: linux-kernel <linux-kernel@vger.kernel.org>
      LKML-Reference: <1301041668.14111.52.camel@minggr.sh.intel.com>
      Signed-off-by: NLin Ming <ming.m.lin@intel.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      cd25f8bc
  22. 16 3月, 2011 1 次提交
    • I
      perf probe: Clean up probe_point_lazy_walker() return value · 5e814dd5
      Ingo Molnar 提交于
      Newer compilers (gcc 4.6) complains about:
      
              return ret < 0 ?: 0;
      
      For the following reason:
      
        util/probe-finder.c: In function ‘probe_point_lazy_walker’:
        util/probe-finder.c:1331:18: error: the omitted middle operand in ?: will always be ‘true’, suggest explicit middle operand [-Werror=parentheses]
      
      And indeed the return value is a somewhat obscure (but correct) value
      of 'true', so return 'ret' instead - this is cleaner and unconfuses
      GCC as well.
      
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      5e814dd5
  23. 22 2月, 2011 2 次提交
    • A
      perf probe: Remove redundant checks · 8635bf6e
      Arnaldo Carvalho de Melo 提交于
      While fixing an error propagating problem in f809b25 I added two
      redundant checks.
      
      I did that because I didn't expect the checks to be on the while and for
      loop condition expression, where they are tested before we run the loop,
      where the 'ret' variable is set.
      
      So remove it from there and leave it just after it is actually set,
      eliminating unneded tests.
      Reported-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      8635bf6e
    • A
      perf probe: Fix error propagation leading to segfault · fbee632d
      Arnaldo Carvalho de Melo 提交于
      There are two hunks in this patch that stops probe processing as soon as one
      error is found, breaking out of loops, the other fix an error propagation that
      should return a negative error number but instead was returning the result of
      "ret < 0", which is 1 and thus made several error checks fail because they test
      agains < 0.
      
      The problem could be triggered by asking for a variable that was optimized out,
      fact that should stop the whole probe processing but instead was segfaulting
      while installing broken probes:
      
      [root@emilia ~]# probe perf_mmap:55 user_lock_limit
      Failed to find the location of user_lock_limit at this address.
       Perhaps, it has been optimized out.
      Failed to find 'user_lock_limit' in this function.
      Add new events:
        probe:perf_mmap      (on perf_mmap:55 with user_lock_limit)
        probe:perf_mmap_1    (on perf_mmap:55 with user_lock_limit)
      Segmentation fault (core dumped)
      [root@emilia ~]# perf probe -l
        probe:perf_mmap      (on perf_mmap:55@git/linux/kernel/perf_event.c with user_lock_limit)
        probe:perf_mmap_1    (on perf_mmap:55@git/linux/kernel/perf_event.c with user_lock_limit)
      [root@emilia ~]#
      
      After the fix:
      
      [root@emilia ~]# probe perf_mmap:55 user_lock_limit
      Failed to find the location of user_lock_limit at this address.
       Perhaps, it has been optimized out.
      Failed to find 'user_lock_limit' in this function.
        Error: Failed to add events. (-2)
      [root@emilia ~]#
      
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Tom Zanussi <tzanussi@gmail.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      fbee632d
  24. 07 2月, 2011 2 次提交
  25. 24 1月, 2011 2 次提交
    • M
      perf probe: Enable to put probe inline function call site · 5069ed86
      Masami Hiramatsu 提交于
      Enable to put probe inline function call site. This will increase line-based
      probe-ability.
      
      <Without this patch>
      $ ./perf probe -L schedule:48
      <schedule:48>
                      pre_schedule(rq, prev);
      
           50         if (unlikely(!rq->nr_running))
                              idle_balance(cpu, rq);
      
                      put_prev_task(rq, prev);
                      next = pick_next_task(rq);
      
           56         if (likely(prev != next)) {
                              sched_info_switch(prev, next);
                              trace_sched_switch_out(prev, next);
                              perf_event_task_sched_out(prev, next);
      
      <With this patch>
      $ ./perf probe -L schedule:48
      <schedule:48>
           48         pre_schedule(rq, prev);
      
           50         if (unlikely(!rq->nr_running))
           51                 idle_balance(cpu, rq);
      
           53         put_prev_task(rq, prev);
           54         next = pick_next_task(rq);
      
           56         if (likely(prev != next)) {
           57                 sched_info_switch(prev, next);
           58                 trace_sched_switch_out(prev, next);
           59                 perf_event_task_sched_out(prev, next);
      
      Cc: 2nddept-manager@sdl.hitachi.co.jp
      Cc: Franck Bui-Huu <fbuihuu@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <20110113124604.22426.48873.stgit@ltc236.sdl.hitachi.co.jp>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      5069ed86
    • M
      perf probe: Introduce lines walker interface · 4cc9cec6
      Masami Hiramatsu 提交于
      Introduce die_walk_lines() for walking on the line list of given die, and use
      it in line_range finder and probe point finder.
      
      Cc: 2nddept-manager@sdl.hitachi.co.jp
      Cc: Franck Bui-Huu <fbuihuu@gmail.com>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <20110113124558.22426.48170.stgit@ltc236.sdl.hitachi.co.jp>
      Signed-off-by: NMasami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
      [ committer note: s/%ld/%zd/ for a size_t nlines var that broke f14 x86 build]
      Signed-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      4cc9cec6