Skip to content
  • Yang Jihong's avatar
    perf probe: Fix add event failure when running 32-bit perf in a 64-bit kernel · 22a66551
    Yang Jihong authored
    
    
    The "address" member of "struct probe_trace_point" uses long data type.
    If kernel is 64-bit and perf program is 32-bit, size of "address"
    variable is 32 bits.
    
    As a result, upper 32 bits of address read from kernel are truncated, an
    error occurs during address comparison in kprobe_warn_out_range().
    
    Before:
    
      # perf probe -a schedule
      schedule is out of .text, skip it.
        Error: Failed to add events.
    
    Solution:
      Change data type of "address" variable to u64 and change corresponding
    address printing and value assignment.
    
    After:
    
      # perf.new.new probe -a schedule
      Added new event:
        probe:schedule       (on schedule)
    
      You can now use it in all perf tools, such as:
    
              perf record -e probe:schedule -aR sleep 1
    
      # perf probe -l
        probe:schedule       (on schedule@kernel/sched/core.c)
      # perf record -e probe:schedule -aR sleep 1
      [ perf record: Woken up 1 times to write data ]
      [ perf record: Captured and wrote 0.156 MB perf.data (1366 samples) ]
      # perf report --stdio
      # To display the perf.data header info, please use --header/--header-only options.
      #
      #
      # Total Lost Samples: 0
      #
      # Samples: 1K of event 'probe:schedule'
      # Event count (approx.): 1366
      #
      # Overhead  Command          Shared Object      Symbol
      # ........  ...............  .................  ............
      #
           6.22%  migration/0      [kernel.kallsyms]  [k] schedule
           6.22%  migration/1      [kernel.kallsyms]  [k] schedule
           6.22%  migration/2      [kernel.kallsyms]  [k] schedule
           6.22%  migration/3      [kernel.kallsyms]  [k] schedule
           6.15%  migration/10     [kernel.kallsyms]  [k] schedule
           6.15%  migration/11     [kernel.kallsyms]  [k] schedule
           6.15%  migration/12     [kernel.kallsyms]  [k] schedule
           6.15%  migration/13     [kernel.kallsyms]  [k] schedule
           6.15%  migration/14     [kernel.kallsyms]  [k] schedule
           6.15%  migration/15     [kernel.kallsyms]  [k] schedule
           6.15%  migration/4      [kernel.kallsyms]  [k] schedule
           6.15%  migration/5      [kernel.kallsyms]  [k] schedule
           6.15%  migration/6      [kernel.kallsyms]  [k] schedule
           6.15%  migration/7      [kernel.kallsyms]  [k] schedule
           6.15%  migration/8      [kernel.kallsyms]  [k] schedule
           6.15%  migration/9      [kernel.kallsyms]  [k] schedule
           0.22%  rcu_sched        [kernel.kallsyms]  [k] schedule
      ...
      #
      # (Cannot load tips.txt file, please install perf!)
      #
    
    Signed-off-by: default avatarYang Jihong <yangjihong1@huawei.com>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Frank Ch. Eigler <fche@redhat.com>
    Cc: Ian Rogers <irogers@google.com>
    Cc: Jianlin Lv <jianlin.lv@arm.com>
    Cc: Jin Yao <yao.jin@linux.intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Li Huafei <lihuafei1@huawei.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Link: http://lore.kernel.org/lkml/20210715063723.11926-1-yangjihong1@huawei.com
    
    
    Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    22a66551