1. 19 Mar, 2018 5 commits
    • Masami Hiramatsu's avatar
      perf probe: Use right type to access array elements · d0461794
      Masami Hiramatsu authored
      Current 'perf probe' converts the type of array-elements incorrectly. It
      always converts the types as a pointer of array. This passes the "array"
      type DIE to the type converter so that it can get correct "element of
      array" type DIE from it.
      
      E.g.
        ====
        $ cat hello.c
        #include <stdio.h>
      
        void foo(int a[])
        {
      	  printf("%d\n", a[1]);
        }
      
        void main()
        {
      	  int a[3] = {4, 5, 6};
      	  printf("%d\n", a[0]);
      	  foo(a);
        }
      
        $ gcc -g hello.c -o hello
        $ perf probe -x ./hello -D "foo a[1]"
        ====
      
      Without this fix, above outputs
        ====
        p:probe_hello/foo /tmp/hello:0x4d3 a=+4(-8(%bp)):u64
        ====
      The "u64" means "int *", but a[1] is "int".
      
      With this,
        ====
        p:probe_hello/foo /tmp/hello:0x4d3 a=+4(-8(%bp)):s32
        ====
      So, "int" correctly converted to "s32"
      Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Ravi Bangoria <ravi.bangoria@linux.vnet.ibm.com>
      Cc: Shuah Khan <shuah@kernel.org>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      Cc: Tom Zanussi <tom.zanussi@linux.intel.com>
      Cc: linux-kselftest@vger.kernel.org
      Cc: linux-trace-users@vger.kernel.org
      Fixes: b2a3c12b ("perf probe: Support tracing an entry of array")
      Link: http://lkml.kernel.org/r/152129114502.31874.2474068470011496356.stgit@devboxSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d0461794
    • Arnaldo Carvalho de Melo's avatar
      perf annotate: Use ops->target.name when available for unresolved call targets · 4c9cb2c2
      Arnaldo Carvalho de Melo authored
      There is a bug where when using 'perf annotate timerqueue_add' the
      target for its only routine called with the 'callq' instruction,
      'rb_insert_color', doesn't get resolved from its address when parsing
      that 'callq' instruction.
      
      That symbol resolution works when using 'perf report --tui' and then
      doing annotation for 'timerqueue_add' from there, the vmlinux
      dso->symbols rb_tree somehow gets in a state that we can't find that
      address, that is a bug that has to be further investigated.
      
      But since the objdump output has the function name, i.e. the raw objdump
      disassembled line looks like:
      
      So, before:
      
        # perf annotate timerqueue_add
      
                    │      mov    %rbx,%rdi
                    │      mov    %rbx,(%rdx)
                    │    → callq  *ffffffff8184dc80
                    │      mov    0x8(%rbp),%rdx
                    │      test   %rdx,%rdx
                    │    ↓ je     67
      
        # perf report
      
                    │      mov    %rbx,%rdi
                    │      mov    %rbx,(%rdx)
                    │    → callq  rb_insert_color
                    │      mov    0x8(%rbp),%rdx
                    │      test   %rdx,%rdx
                    │    ↓ je     67
      
      And after both look the same:
      
        # perf annotate timerqueue_add
      
                    │      mov    %rbx,%rdi
                    │      mov    %rbx,(%rdx)
                    │    → callq  rb_insert_color
                    │      mov    0x8(%rbp),%rdx
                    │      test   %rdx,%rdx
                    │    ↓ je     67
      
      From 'perf report' one can annotate and navigate to that 'rb_insert_color'
      function, but not directly from 'perf annotate timerqueue_add', that
      remains to be investigated and fixed.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-nkktz6355rhqtq7o8atr8f8r@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4c9cb2c2
    • Arnaldo Carvalho de Melo's avatar
      perf top: Document --ignore-vmlinux · a8403912
      Arnaldo Carvalho de Melo authored
      We've had this since 2013, document it.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Cc: Willy Tarreau <w@1wt.eu>
      Fixes: fc2be696 ("perf symbols: Add new option --ignore-vmlinux for perf top")
      Link: https://lkml.kernel.org/n/tip-0jwfueooddwfsw9r603belxi@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a8403912
    • Jiri Olsa's avatar
      perf tools: Fix python extension build for gcc 8 · b7a313d8
      Jiri Olsa authored
      The gcc 8 compiler won't compile the python extension code with the
      following errors (one example):
      
        python.c:830:15: error: cast between incompatible  function types from              \
        ‘PyObject * (*)(struct pyrf_evsel *, PyObject *, PyObject *)’                       \
        uct _object * (*)(struct pyrf_evsel *, struct _object *, struct _object *)’} to     \
        ‘PyObject * (*)(PyObject *, PyObject *)’ {aka ‘struct _object * (*)(struct _objeuct \
        _object *)’} [-Werror=cast-function-type]
           .ml_meth  = (PyCFunction)pyrf_evsel__open,
      
      The problem with the PyMethodDef::ml_meth callback is that its type is
      determined based on the PyMethodDef::ml_flags value, which we set as
      METH_VARARGS | METH_KEYWORDS.
      
      That indicates that the callback is expecting an extra PyObject* arg, and is
      actually PyCFunctionWithKeywords type, but the base PyMethodDef::ml_meth type
      stays PyCFunction.
      
      Previous gccs did not find this, gcc8 now does. Fixing this by silencing this
      warning for python.c build.
      
      Commiter notes:
      
      Do not do that for CC=clang, as it breaks the build in some clang
      versions, like the ones in fedora up to fedora27:
      
        fedora:25:error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option]
        fedora:26:error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option]
        fedora:27:error: unknown warning option '-Wno-cast-function-type'; did you mean '-Wno-bad-function-cast'? [-Werror,-Wunknown-warning-option]
        #
      
      those have:
      
        clang version 3.9.1 (tags/RELEASE_391/final)
      
      The one in rawhide accepts that:
      
        clang version 6.0.0 (tags/RELEASE_600/final)
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
      Link: http://lkml.kernel.org/r/20180319082902.4518-2-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b7a313d8
    • Jiri Olsa's avatar
      perf tools: Fix snprint warnings for gcc 8 · 77f18153
      Jiri Olsa authored
      With gcc 8 we get new set of snprintf() warnings that breaks the
      compilation, one example:
      
        tests/mem.c: In function ‘check’:
        tests/mem.c:19:48: error: ‘%s’ directive output may be truncated writing \
              up to 99 bytes into a region of size 89 [-Werror=format-truncation=]
          snprintf(failure, sizeof failure, "unexpected %s", out);
      
      The gcc docs says:
      
       To avoid the warning either use a bigger buffer or handle the
       function's return value which indicates whether or not its output
       has been truncated.
      
      Given that all these warnings are harmless, because the code either
      properly fails due to uncomplete file path or we don't care for
      truncated output at all, I'm changing all those snprintf() calls to
      scnprintf(), which actually 'checks' for the snprint return value so the
      gcc stays silent.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Josh Poimboeuf <jpoimboe@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
      Link: http://lkml.kernel.org/r/20180319082902.4518-1-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      77f18153
  2. 16 Mar, 2018 35 commits
    • Yisheng Xie's avatar
      perf debug: Avoid setting 'quiet' to 'true' unnecessarily · a08f6dd4
      Yisheng Xie authored
      When using --quiet to disable messages, we will set the 'quiet' variable
      to 'true' first, then check that variable to decide whether we need to
      call perf_quiet_option(), so no need to set 'quiet' to 'true' once more
      in perf_quiet_option().
      Signed-off-by: default avatarYisheng Xie <xieyisheng1@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/1520944274-37001-2-git-send-email-xieyisheng1@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a08f6dd4
    • Yisheng Xie's avatar
      perf mmap: Discard head in overwrite_rb_find_range() · 699db111
      Yisheng Xie authored
      In overwrite mode, start will be set to head in perf_mmap__read_init().
      Therefore, there is no need to set the start one more time in
      overwrite_rb_find_range() and *start can be used as head instead of
      passing head to overwrite_rb_find_range().
      Signed-off-by: default avatarYisheng Xie <xieyisheng1@huawei.com>
      Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/1520944274-37001-1-git-send-email-xieyisheng1@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      699db111
    • Sukadev Bhattiprolu's avatar
    • Jiri Olsa's avatar
      perf report: Support forced leader feature in pipe mode · 57b5de46
      Jiri Olsa authored
      Stephane reported a problem with forced leader in pipe mode, where
      report does not force the group output. The reason is that we don't
      force the leader in pipe mode.
      
      This patch adds HEADER_LAST_FEATURE mark to have a point where we have
      all events and features received, and force the group if requested.
      
        $ perf record --group -e '{cycles, instructions}' -o - kill | perf report -i - --group
      
        SNIP
      
        #         Overhead  Command  Shared Object     Symbol
        # ................  .......  ................  .......................
        #
            28.36%   0.00%  kill     libc-2.25.so      [.] __unregister_atfork
            26.32%   0.00%  kill     libc-2.25.so      [.] _dl_addr
            26.10%   0.00%  kill     ld-2.25.so        [.] _dl_relocate_object
            17.32%   0.00%  kill     ld-2.25.so        [.] __tunables_init
             1.70%   0.01%  kill     [unknown]         [k] 0xffffffffafa01a40
             0.20%   0.00%  kill     ld-2.25.so        [.] _start
             0.00%  48.77%  kill     ld-2.25.so        [.] do_lookup_x
             0.00%  42.97%  kill     libc-2.25.so      [.] _IO_getline
             0.00%   6.35%  kill     ld-2.25.so        [.] strcmp
             0.00%   1.71%  kill     ld-2.25.so        [.] _dl_sysdep_start
             0.00%   0.19%  kill     ld-2.25.so        [.] _dl_start
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Tested-by: default avatarStephane Eranian <eranian@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180314092205.23291-2-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      57b5de46
    • Jiri Olsa's avatar
      perf record: Synthesize features before events in pipe mode · a2015516
      Jiri Olsa authored
      We need to synthesize events first, because some features works on top
      of them (on report side).
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarStephane Eranian <eranian@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180314092205.23291-1-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a2015516
    • Colin Ian King's avatar
      perf tests: Fix out of bounds access on array fd when cnt is 100 · 66790bc8
      Colin Ian King authored
      Currently when cnt is 100 an array bounds overflow occurs on the
      assignment of fd[cnt]. Fix this by performing the bounds check on cnt
      before writing to fd.
      
      Detected by cppcheck:
      
      tools/perf/tests/bp_account.c:115: (warning) Either the condition
      'cnt==100' is redundant or the array 'fd[100]' is accessed at index 100,
      which is out of bounds.
      Signed-off-by: default avatarColin King <colin.king@canonical.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: kernel-janitors@vger.kernel.org
      Fixes: 032db28e ("perf tests: Add breakpoint accounting/modify test")
      Link: http://lkml.kernel.org/r/20180314173354.11250-1-colin.king@canonical.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      66790bc8
    • Arnaldo Carvalho de Melo's avatar
      perf annotate: Use asprintf when formatting objdump command line · 6810158d
      Arnaldo Carvalho de Melo authored
      We were using a local buffer with an arbitrary size, that would have to
      get increased to avoid truncation as warned by gcc 8:
      
        util/annotate.c: In function 'symbol__disassemble':
        util/annotate.c:1488:4: error: '%s' directive output may be truncated writing up to 4095 bytes into a region of size between 3966 and 8086 [-Werror=format-truncation=]
            "%s %s%s --start-address=0x%016" PRIx64
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        util/annotate.c:1498:20:
            symfs_filename, symfs_filename);
                            ~~~~~~~~~~~~~~
        util/annotate.c:1490:50: note: format string is defined here
            " -l -d %s %s -C \"%s\" 2>/dev/null|grep -v \"%s:\"|expand",
                                                        ^~
        In file included from /usr/include/stdio.h:861,
                         from util/color.h:5,
                         from util/sort.h:8,
                         from util/annotate.c:14:
        /usr/include/bits/stdio2.h:67:10: note: '__builtin___snprintf_chk' output 116 or more bytes (assuming 8331) into a destination of size 8192
           return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                __bos (__s), __fmt, __va_arg_pack ());
                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      
      So switch to asprintf, that will make sure enough space is available.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: https://lkml.kernel.org/n/tip-qagoy2dmbjpc9gdnaj0r3mml@git.kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6810158d
    • Sandipan Das's avatar
      perf test: Fix exit code for record+probe_libc_inet_pton.sh · 10f354a3
      Sandipan Das authored
      This fixes record+probe_libc_inet_pton.sh from always exiting with code
      0 and making the test pass even if the perf script output does not match
      the expected pattern.
      
      The issue can be observed if this test is run with the verbose flags as
      shown below:
      
        60: probe libc's inet_pton & backtrace it with ping       :
        ...
        ping 19602 [006] 16988.413767: probe_libc:inet_pton: (7fff9a2c42e8)
        1842e8 __GI___inet_pton (/usr/lib64/libc-2.26.so)
        130db4 getaddrinfo (/usr/lib64/libc-2.26.so)
      
        FAIL: expected backtrace entry 3 ".*\(.*/bin/ping.*\)$" got ""
        test child finished with 0
        ...
        probe libc's inet_pton & backtrace it with ping: Ok
      Signed-off-by: default avatarSandipan Das <sandipan@linux.vnet.ibm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Fixes: e07d585e2454 ("perf tests: Switch trace+probe_libc_inet_pton to use record")
      Link: http://lkml.kernel.org/r/20180312124450.30371-1-sandipan@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      10f354a3
    • Jiri Olsa's avatar
      perf machine: Fix mmap name setup · c192524e
      Jiri Olsa authored
      Leo reported broken -k option behavior. The reason is that we used
      symbol_conf.vmlinux_name as a source for mmap event name, but in fact
      it's a vmlinux path.
      
      Moving the symbol_conf.vmlinux_name check for both host and guest to the
      proper place and out of the machine__set_mmap_name function.
      Reported-by: default avatarLeo Yan <leo.yan@linaro.org>
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarLeo Yan <leo.yan@linaro.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Fixes: commit ("8c7f1bb3 perf machine: Move kernel mmap name into struct machine")
      Link: http://lkml.kernel.org/r/20180312152406.10141-1-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c192524e
    • Thomas Richter's avatar
      perf stat: Make function perf_stat_evsel_id_init static · 26e4711f
      Thomas Richter authored
      Function perf_stat_evsel_id_init() has global linkage but is only used
      in util/stat.c. Make it static.
      Signed-off-by: default avatarThomas Richter <tmricht@linux.vnet.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Link: http://lkml.kernel.org/r/20180312103807.45069-2-tmricht@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      26e4711f
    • Jiri Olsa's avatar
      perf llvm: Display eBPF compiling command in debug output · 5eab5a7e
      Jiri Olsa authored
      In addition to template, display also the real compile command line with
      all the variables substituted.
      
        llvm compiling command template: $CLANG_EXEC -D__KERNEL__ -D__NR_CPUS__=$NR_CPUS ...
        llvm compiling command : /usr/bin/clang -D__KERNEL__ -D__NR_CPUS__=24 -DLINUX_VERSION_CODE=0x41000 ...
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180312094313.18738-3-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5eab5a7e
    • Yisheng Xie's avatar
      perf top: Fix top.call-graph config option reading · a3a4a3b3
      Yisheng Xie authored
      When trying to add the "call-graph" variable for top into the
      .perfconfig file, like:
      
            [top]
                  call-graph = fp
      
      I that perf_top_config() do not parse this variable.
      
      Fix it by calling perf_default_config() when the top.call-graph variable
      is set.
      Signed-off-by: default avatarYisheng Xie <xieyisheng1@huawei.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Fixes: b8cbb349 ("perf config: Bring perf_default_config to the very beginning at main()")
      Link: http://lkml.kernel.org/r/1520853957-36106-1-git-send-email-xieyisheng1@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a3a4a3b3
    • Yisheng Xie's avatar
      perf record: Avoid duplicate call of perf_default_config() · cff17205
      Yisheng Xie authored
      We have brought perf_default_config to the very beginning at main(), so
      it no need to call perf_default_config() once more for most of config in
      perf-record but only for record.call-graph.
      Signed-off-by: default avatarYisheng Xie <xieyisheng1@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/1520853957-36106-2-git-send-email-xieyisheng1@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      cff17205
    • Martin Vuille's avatar
      perf unwind: Unwind with libdw doesn't take symfs into account · 3d20c624
      Martin Vuille authored
      Path passed to libdw for unwinding doesn't include symfs path
      if specified, so unwinding fails because ELF file is not found.
      
      Similar to unwinding with libunwind, pass symsrc_filename instead
      of long_name. If there is no symsrc_filename, fallback to long_name.
      Signed-off-by: default avatarMartin Vuille <jpmv27@aim.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Wang Nan <wangnan0@huawei.com>
      Link: http://lkml.kernel.org/r/20180211212420.18388-1-jpmv27@aim.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3d20c624
    • Ganapatrao Kulkarni's avatar
      perf vendor events arm64: Enable JSON events for ThunderX2 B0 · a8685f08
      Ganapatrao Kulkarni authored
      There is MIDR change on ThunderX2 B0, adding an entry to mapfile to
      enable JSON events for B0.
      Signed-off-by: default avatarGanapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Acked-by: default avatarWill Deacon <will.deacon@arm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ganapatrao Kulkarni <gpkulkarni@gklkml16.com>
      Cc: Jayachandran C <jnair@caviumnetworks.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: John Garry <john.garry@huawei.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Robert Richter <robert.richter@cavium.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20180307110803.32418-1-ganapatrao.kulkarni@cavium.com
      [ Fixup wrt recent patchset by John Garry ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a8685f08
    • Ingo Molnar's avatar
      perf report: Show zero counters as well in 'perf report --stat' · 39ce7fb3
      Ingo Molnar authored
      When recently using 'perf report --stat' it was not clear to me from the
      output whether a particular statistics field (LOST_SAMPLES) was not
      present, or just zero:
      
        fomalhaut:~> perf report --stat
      
        Aggregated stats:
                 TOTAL events:     495984
                  MMAP events:         85
                  COMM events:       3389
                  EXIT events:       1605
              THROTTLE events:          2
            UNTHROTTLE events:          2
                  FORK events:       3377
                SAMPLE events:     472629
                 MMAP2 events:      14753
        FINISHED_ROUND events:        139
            THREAD_MAP events:          1
               CPU_MAP events:          1
             TIME_CONV events:          1
      
      I had to check the output several times to ascertain that I'm not
      misreading the output, that the field didn't change and that I didn't
      misremember the name. In fact I had to look into the perf source to make
      sure that zero fields are indeed not shown.
      
      With the patch applied:
      
        fomalhaut:~> perf report --stat
      
        Aggregated stats:
                 TOTAL events:     495984
                  MMAP events:         85
                  LOST events:          0
                  COMM events:       3389
                  EXIT events:       1605
              THROTTLE events:          2
            UNTHROTTLE events:          2
                  FORK events:       3377
                  READ events:          0
                SAMPLE events:     472629
                 MMAP2 events:      14753
                   AUX events:          0
          ITRACE_START events:          0
          LOST_SAMPLES events:          0
                SWITCH events:          0
       SWITCH_CPU_WIDE events:          0
            NAMESPACES events:          0
                  ATTR events:          0
            EVENT_TYPE events:          0
          TRACING_DATA events:          0
              BUILD_ID events:          0
        FINISHED_ROUND events:        139
              ID_INDEX events:          0
         AUXTRACE_INFO events:          0
              AUXTRACE events:          0
        AUXTRACE_ERROR events:          0
            THREAD_MAP events:          1
               CPU_MAP events:          1
           STAT_CONFIG events:          0
                  STAT events:          0
            STAT_ROUND events:          0
          EVENT_UPDATE events:          0
             TIME_CONV events:          1
               FEATURE events:          0
      
      It's pretty clear at a glance that LOST_SAMPLES is present but zero.
      
      The original output can still be gotten via:
      
        fomalhaut:~> perf report --stat | grep -vw 0
      
        Aggregated stats:
                 TOTAL events:     495984
                  MMAP events:         85
                  COMM events:       3389
                  EXIT events:       1605
              THROTTLE events:          2
            UNTHROTTLE events:          2
                  FORK events:       3377
                SAMPLE events:     472629
                 MMAP2 events:      14753
        FINISHED_ROUND events:        139
            THREAD_MAP events:          1
               CPU_MAP events:          1
             TIME_CONV events:          1
      
      So I don't think there's any real loss in functionality.
      Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Link: http://lkml.kernel.org/r/20180307152430.7e5h7e657b7bgd7q@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      39ce7fb3
    • Thomas Richter's avatar
      perf stat: Fix core dump when flag T is used · fca32340
      Thomas Richter authored
      Executing command 'perf stat -T -- ls' dumps core on x86 and s390.
      
      Here is the call back chain (done on x86):
      
       # gdb ./perf
       ....
       (gdb) r stat -T -- ls
      ...
      Program received signal SIGSEGV, Segmentation fault.
      0x00007ffff56d1963 in vasprintf () from /lib64/libc.so.6
      (gdb) where
       #0  0x00007ffff56d1963 in vasprintf () from /lib64/libc.so.6
       #1  0x00007ffff56ae484 in asprintf () from /lib64/libc.so.6
       #2  0x00000000004f1982 in __parse_events_add_pmu (parse_state=0x7fffffffd580,
          list=0xbfb970, name=0xbf3ef0 "cpu",
          head_config=0xbfb930, auto_merge_stats=false) at util/parse-events.c:1233
       #3  0x00000000004f1c8e in parse_events_add_pmu (parse_state=0x7fffffffd580,
          list=0xbfb970, name=0xbf3ef0 "cpu",
          head_config=0xbfb930) at util/parse-events.c:1288
       #4  0x0000000000537ce3 in parse_events_parse (_parse_state=0x7fffffffd580,
          scanner=0xbf4210) at util/parse-events.y:234
       #5  0x00000000004f2c7a in parse_events__scanner (str=0x6b66c0
          "task-clock,{instructions,cycles,cpu/cycles-t/,cpu/tx-start/}",
          parse_state=0x7fffffffd580, start_token=258) at util/parse-events.c:1673
       #6  0x00000000004f2e23 in parse_events (evlist=0xbe9990, str=0x6b66c0
          "task-clock,{instructions,cycles,cpu/cycles-t/,cpu/tx-start/}", err=0x0)
          at util/parse-events.c:1713
       #7  0x000000000044e137 in add_default_attributes () at builtin-stat.c:2281
       #8  0x000000000044f7b5 in cmd_stat (argc=1, argv=0x7fffffffe3b0) at
          builtin-stat.c:2828
       #9  0x00000000004c8b0f in run_builtin (p=0xab01a0 <commands+288>, argc=4,
          argv=0x7fffffffe3b0) at perf.c:297
       #10 0x00000000004c8d7c in handle_internal_command (argc=4,
          argv=0x7fffffffe3b0) at perf.c:349
       #11 0x00000000004c8ece in run_argv (argcp=0x7fffffffe20c,
         argv=0x7fffffffe200) at perf.c:393
       #12 0x00000000004c929c in main (argc=4, argv=0x7fffffffe3b0) at perf.c:537
      (gdb)
      
      It turns out that a NULL pointer is referenced. Here are the
      function calls:
      
        ...
        cmd_stat()
        +---> add_default_attributes()
      	+---> parse_events(evsel_list, transaction_attrs, NULL);
      	             3rd parameter set to NULL
      
      Function parse_events(xx, xx, struct parse_events_error *err) dives
      into a bison generated scanner and creates
      parser state information for it first:
      
         struct parse_events_state parse_state = {
                      .list   = LIST_HEAD_INIT(parse_state.list),
                      .idx    = evlist->nr_entries,
                      .error  = err,   <--- NULL POINTER !!!
                      .evlist = evlist,
              };
      
      Now various functions inside the bison scanner are called to end up in
      __parse_events_add_pmu(struct parse_events_state *parse_state, ..) with
      first parameter being a pointer to above structure definition.
      
      Now the PMU event name is not found (because being executed in a VM) and
      this function tries to create an error message with
      
         asprintf(&parse_state->error.str, ....)
      
      which references a NULL pointer and dumps core.
      
      Fix this by providing a pointer to the necessary error information
      instead of NULL. Technically only the else part is needed to avoid the
      core dump, just lets be safe...
      Signed-off-by: default avatarThomas Richter <tmricht@linux.vnet.ibm.com>
      Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
      Cc: Hendrik Brueckner <brueckner@linux.vnet.ibm.com>
      Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
      Link: http://lkml.kernel.org/r/20180308145735.64717-1-tmricht@linux.vnet.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      fca32340
    • John Garry's avatar
      perf vendor events arm64: add HiSilicon hip08 JSON file · 3d4caec1
      John Garry authored
      This patch adds the HiSilicon hip08 JSON file. This platform follows the
      ARMv8 recommended IMPLEMENTATION DEFINED events, where applicable.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-12-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3d4caec1
    • John Garry's avatar
      perf vendor events arm64: fixup A53 to use recommended events · afe4d089
      John Garry authored
      This patch fixes the ARM Cortex-A53 json to use event definition from
      the ARMv8 recommended events.
      
      In addition to this change, other changes were made:
      
      - remove stray ','
      - remove mirrored events in memory.json and bus.json
      - fixed indentation to be consistent with other ARM
        JSONs
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-11-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      afe4d089
    • John Garry's avatar
      perf vendor events arm64: Fixup ThunderX2 to use recommended events · ae43053b
      John Garry authored
      This patch fixes the Cavium ThunderX2 JSON to use event definitions from
      the ARMv8 recommended events.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Tested-by: default avatarGanapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-10-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ae43053b
    • John Garry's avatar
      perf vendor events arm64: Add armv8-recommended.json · 360b7b03
      John Garry authored
      Add JSON for ARMv8 IMPLEMENTATION DEFINED recommended events.
      
      The JSON is copied from ARMv8 architecture reference manual, available
      here:
      
      	https://static.docs.arm.com/ddi0487/ca/DDI0487C_a_armv8_arm.pdf
      
      Originally-from: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-9-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      360b7b03
    • John Garry's avatar
      perf vendor events: Add support for arch standard events · e9d32c1b
      John Garry authored
      For some architectures (like arm), there are architecture- defined
      events. Sometimes these events may be "recommended" according to the
      architecture standard, in that the implementer is free ignore the
      "recommendation" and create its custom event.
      
      This patch adds support for parsing standard events from arch-defined
      JSONs, and fixing up vendor events when they have implemented these
      events as standard.
      
      Support is also ensured that the vendor may implement their own custom
      events.
      
      A new step is added to the pmu events parsing to fix up the vendor
      events with the arch-standard events.
      
      The arch-defined JSONs must be placed in the arch root folder for
      preprocessing prior to tree JSON processing.
      
      In the vendor JSON, to specify that the arch event is supported, the
      keyword "ArchStdEvent" should be used, like this:
      
      [
          {
              "ArchStdEvent": "L1D_CACHE_WR",
          },
      ]
      
      Matching is based on the "EventName" field in the architecture JSON.
      
      No other JSON objects are strictly required. However, for other objects
      added, these take precedence over architecture defined standard events,
      thus supporting separate events which have the same event code.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-8-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e9d32c1b
    • John Garry's avatar
      perf vendor events arm64: Relocate Cortex A53 JSONs to arm subdirectory · 82e6fdd6
      John Garry authored
      Since jevents now supports vendor subdirectory, relocate the Cortex-A53
      JSONs to arm subdirectory.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-7-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      82e6fdd6
    • John Garry's avatar
      perf vendor events arm64: Relocate ThunderX2 JSON to cavium subdirectory · e3b9f1e8
      John Garry authored
      Since jevents now supports vendor subdirectory, relocate
      the ThunderX2 JSON to Cavium subdirectory.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Tested-by: default avatarGanapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-6-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e3b9f1e8
    • John Garry's avatar
      perf vendor events: Add support for pmu events vendor subdirectory · 51ce1dcc
      John Garry authored
      For some architectures (like arm), it is required to support a vendor
      subdirectory and not locate all the JSONs for a specific vendor in the
      same folder.
      
      This is because all the events for the same vendor will be placed in the
      same pmu events table, which may cause conflict.  This conflict would be
      in the instance that a vendor's custom implemented events do have the
      same meaning on different platforms, so events in the pmu table would
      conflict. In addition, per list command may show events which are not
      even supported for a given platform.
      
      This patch adds support for a arch/vendor/platform directory hierarchy,
      while maintaining backwards-compatibility for existing arch/platform
      structure. In this, each platform would always have its own pmu events
      table.
      
      In generated file pmu_events.c, each platform table name is in the
      format pme{_vendor}_platform, like this:
      
      struct pmu_events_map pmu_events_map[] = {
      {
      	.cpuid = "0x00000000420f5160",
      	.version = "v1",
      	.type = "core",
      	.table = pme_cavium_thunderx2
      },
      {
      	.cpuid = 0,
      	.version = 0,
      	.type = 0,
      	.table = 0,
      },
      };
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Tested-by: default avatarSukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-5-git-send-email-john.garry@huawei.com
      Link: http://lkml.kernel.org/r/1521047452-28565-1-git-send-email-john.garry@huawei.com
      [ Add missing limits.h include, fixing the build on at least all Alpine Linux versions tested (3.4 to 3.7 + edge), ]
      [ Applied a patch to fix reading ./.. directories in XFS, see second Link tag ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      51ce1dcc
    • John Garry's avatar
      perf vendor events: Drop support for unused topic directories · 6f2f2ca3
      John Garry authored
      Currently a topic subdirectory is supported in the pmu-events dir, in
      the following sample structure: /arch/platform/subtopic/mysubtopic.json
      
      Upto 256 levels of topic subdirectories are supported. So this means
      that JSONs may be located in a topic dir as well as the platform dir.
      
      This topic subdirectory causes problems if we want to add support for a
      vendor dir in the pmu-events structure (in the form
      arch/platform/vendor), in that we cannot differentiate between a vendor
      dir and a topic dir.
      
      Since the topic dir feature is not used, drop it so it does not block
      adding vendor subdirectory support.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-4-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6f2f2ca3
    • John Garry's avatar
      perf vendor events: Fix error code in json_events() · 931ef5dc
      John Garry authored
      When EXPECT macro fails an assertion, the error code is not properly set
      after the first loop of tokens in function json_events().
      
      This is because err is set to the return value from func function
      pointer call, which must be 0 to continue to loop, yet it is not reset
      for for each loop. I assume that this was not the intention, so change
      the code so err is set appropriately in EXPECT macro itself.
      
      In addition to this, the indention in EXPECT macro is tidied. The
      current indention alludes that the 2 statements following the if
      statement are in the body, which is not true.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-3-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      931ef5dc
    • John Garry's avatar
      perf vendor events: Drop incomplete multiple mapfile support · 4c0ab160
      John Garry authored
      Currently jevents supports multiple mapfiles, but this is only in the
      form where mapfile basename starts with 'mapfile.csv'
      
      At the moment, no architectures actually use multiple mapfiles, so drop
      the support for now.
      
      This patch also solves a nuisance where, when the mapfile is edited and
      the text editor may create a backup, jevents may use the backup, as
      shown:
      
        jevents: Many mapfiles? Using pmu-events/arch/arm64/mapfile.csv~, ignoring pmu-events/arch/arm64/mapfile.csv
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ganapatrao Kulkarni <ganapatrao.kulkarni@cavium.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Shaokun Zhang <zhangshaokun@hisilicon.com>
      Cc: Will Deacon <will.deacon@arm.com>
      Cc: William Cohen <wcohen@redhat.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: linuxarm@huawei.com
      Link: http://lkml.kernel.org/r/1520506716-197429-2-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4c0ab160
    • Kim Phillips's avatar
      perf tools arm64: Add libdw DWARF post unwind support for ARM64 · 744e9a91
      Kim Phillips authored
      Based on prior work:
      
        https://lkml.org/lkml/2014/5/6/395
      
      and on how other arches add libdw unwind support.  Includes support for
      running the unwind test, e.g., on a system with only elfutils' libdw
      0.170, the test now runs, and successfully:
      
        $ ./perf test unwind
        56: Test dwarf unwind                 : Ok
      Originally-by: default avatarJean Pihet <jean.pihet@linaro.org>
      Reported-by: default avatarChristian Hansen <chansen3@cisco.com>
      Signed-off-by: default avatarKim Phillips <kim.phillips@arm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180308211030.4ee4a0d6ff6dc5cda1b567d4@arm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      744e9a91
    • Jiri Olsa's avatar
      perf c2c report: Add cacheline address count column · 03d9fcb7
      Jiri Olsa authored
      Adding the 'PA cnt' column grouped under data cacheline address.
      
      It shows how many times the physical addresses changed for the hist
      entry. It does not show the number of different physical addresses for
      entry, because we don't store those. We only track the number of times
      we got different address than we currently hold, which is not expensive
      and gives similar info.
      
        $ perf c2c report --stdio
      
        #        ----------- Cacheline ----------    Total      Tot  ----- LLC Load Hitm -----
        # Index             Address  Node  PA cnt  records     Hitm    Total      Lcl      Rmt
        # .....  ..................  ....  ......  .......  .......  .......  .......  .......
        #
              0  0xffff9ad56dca0a80     0       9       10    7.69%        2        2        0
              1  0xffff9ad56dce0a80     0       9        9    7.69%        2        2        0
              2  0xffff9ad37659ad80     0       1        2    3.85%        1        1        0
      
        ...
      
        #        ----- HITM -----  -- Store Refs --  --------- Data address ---------
        #   Num      Rmt      Lcl   L1 Hit  L1 Miss              Offset  Node  PA cnt      Pid
        # .....  .......  .......  .......  .......  ..................  ....  ......  .......
        #
          -------------------------------------------------------------
              0        0        2        3        0  0xffff9ad56dca0a80
          -------------------------------------------------------------
                   0.00%    0.00%   33.33%    0.00%                 0x0     0       1     2510
                   0.00%    0.00%   33.33%    0.00%                 0x4     0       1     2476
                   0.00%    0.00%   33.33%    0.00%                0x20     0       1        0
                   0.00%  100.00%    0.00%    0.00%                0x38     0       1        0
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Joe Mario <jmario@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180309101442.9224-10-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      03d9fcb7
    • Jiri Olsa's avatar
      perf c2c report: Add span header over cacheline data · d0802b1e
      Jiri Olsa authored
      Forcing the NUMA node output to be grouped with the "Cacheline" column
      in both "Shared Data Cache Line Table" and "Shared Cache Line
      Distribution Pareto" tables.
      
      Before:
        #                                    Total      Tot  ----- LLC Load Hitm -----
        # Index           Cacheline  Node  records     Hitm    Total      Lcl      Rmt
        # .....  ..................  ....  .......  .......  .......  .......  .......
        #
              0      0x7f0830100000     0       84   10.53%        8        8        0
              1  0xffff922a93154200     0        3    2.63%        2        2        0
              2  0xffff922a93154500     0        4    2.63%        2        2        0
      
      After:
        #        ------- Cacheline ------    Total      Tot  ----- LLC Load Hitm -----
        # Index             Address  Node  records     Hitm    Total      Lcl      Rmt
        # .....  ..................  ....  .......  .......  .......  .......  .......
        #
              0      0x7f0830100000     0       84   10.53%        8        8        0
              1  0xffff922a93154200     0        3    2.63%        2        2        0
              2  0xffff922a93154500     0        4    2.63%        2        2        0
      
      Before:
        #        ----- HITM -----  -- Store Refs --        Data address
        #   Num      Rmt      Lcl   L1 Hit  L1 Miss              Offset  Node      Pid
        # .....  .......  .......  .......  .......  ..................  ....  .......
        #
          -------------------------------------------------------------
              0        0        8       32        2      0x7f0830100000
          -------------------------------------------------------------
                   0.00%   75.00%   21.88%    0.00%                0x18     0     1791
                   0.00%   12.50%   37.50%    0.00%                0x18     0     1791
                   0.00%    0.00%   34.38%    0.00%                0x18     0     1791
      
      After:
        #        ----- HITM -----  -- Store Refs --  ----- Data address -----
        #   Num      Rmt      Lcl   L1 Hit  L1 Miss              Offset  Node      Pid
        # .....  .......  .......  .......  .......  ..................  ....  .......
        #
          -------------------------------------------------------------
              0        0        8       32        2      0x7f0830100000
          -------------------------------------------------------------
                   0.00%   75.00%   21.88%    0.00%                0x18     0     1791
                   0.00%   12.50%   37.50%    0.00%                0x18     0     1791
                   0.00%    0.00%   34.38%    0.00%                0x18     0     1791
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Joe Mario <jmario@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180309101442.9224-9-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d0802b1e
    • Jiri Olsa's avatar
      perf c2c report: Display node for cacheline address · 7f834c2e
      Jiri Olsa authored
      Adding the NUMA node info for the data cacheline. Adding the new column
      to both "Shared Data Cache Line Table" and "Shared Cache Line
      Distribution Pareto".
      
      Note the new 'Node' column next to the 'Cacheline'.
      
        $ perf c2c report --stdio
        =================================================
                   Shared Data Cache Line Table
        =================================================
        #
        #                                    Total      Tot  ----- LLC Load Hitm -----
        # Index           Cacheline  Node  records     Hitm    Total      Lcl      Rmt
        # .....  ..................  ....  .......  .......  .......  .......  .......
        #
              0      0x7f0830100000     0       84   10.53%        8        8        0
              1  0xffff922a93154200     0        3    2.63%        2        2        0
              2  0xffff922a93154500     0        4    2.63%        2        2        0
        ...
      
      Note the new 'Node' column next to the 'Offset'.
      
        =================================================
              Shared Cache Line Distribution Pareto
        =================================================
        #
        #        ----- HITM -----  -- Store Refs --        Data address
        #   Num      Rmt      Lcl   L1 Hit  L1 Miss              Offset  Node      Pid
        # .....  .......  .......  .......  .......  ..................  ....  .......
        #
          -------------------------------------------------------------
              0        0        8       32        2      0x7f0830100000
          -------------------------------------------------------------
                   0.00%   75.00%   21.88%    0.00%                0x18     0     1791
                   0.00%   12.50%   37.50%    0.00%                0x18     0     1791
                   0.00%    0.00%   34.38%    0.00%                0x18     0     1791
      
      Using the mem2node object to get the NUMA node data.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Joe Mario <jmario@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180309101442.9224-8-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7f834c2e
    • Jiri Olsa's avatar
      perf c2c report: Call calc_width() only for displayed entries · bc229c21
      Jiri Olsa authored
      There's no need to calculate column widths for entries that are not
      going to be displayed.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Joe Mario <jmario@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180309101442.9224-7-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      bc229c21
    • Jiri Olsa's avatar
      perf c2c report: Make calc_width work with struct c2c_hist_entry · 37731388
      Jiri Olsa authored
      We are going to calculate tje column width based on the struct
      c2c_hist_entry data, so making calc_width to work with struct
      c2c_hist_entry.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Joe Mario <jmario@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180309101442.9224-6-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      37731388
    • Jiri Olsa's avatar
      perf c2c record: Record physical addresses in samples · 8fab7843
      Jiri Olsa authored
      We are going to display NUMA node information in following patches. For
      this we need to have physical address data in the sample.
      
      Adding --phys-data as a default option for perf c2c record.
      Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: David Ahern <dsahern@gmail.com>
      Cc: Joe Mario <jmario@redhat.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lkml.kernel.org/r/20180309101442.9224-5-jolsa@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8fab7843