1. 07 Apr, 2023 17 commits
  2. 04 Apr, 2023 23 commits
    • Ian Rogers's avatar
      perf map: Add accessor for start and end · e5116f46
      Ian Rogers authored
      Later changes will add reference count checking for struct map, start
      and end are frequently accessed variables. Add an accessor so that the
      reference count check is only necessary in one place.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Darren Hart <dvhart@infradead.org>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Dmitriy Vyukov <dvyukov@google.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Hao Luo <haoluo@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Garry <john.g.garry@oracle.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miaoqian Lin <linmq006@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Riccardo Mancini <rickyman7@gmail.com>
      Cc: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
      Cc: Song Liu <song@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
      Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Yury Norov <yury.norov@gmail.com>
      Link: https://lore.kernel.org/r/20230320212248.1175731-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e5116f46
    • Ian Rogers's avatar
      perf map: Add accessor for dso · 63df0e4b
      Ian Rogers authored
      Later changes will add reference count checking for struct map, with
      dso being the most frequently accessed variable. Add an accessor so
      that the reference count check is only necessary in one place.
      
      Additional changes:
       - add a dso variable to avoid repeated map__dso calls.
       - in builtin-mem.c dump_raw_samples, code only partially tested for
         dso == NULL. Make the possibility of NULL consistent.
       - in thread.c thread__memcpy fix use of spaces and use tabs.
      
      Committer notes:
      
      Did missing conversions on these files:
      
         tools/perf/arch/powerpc/util/skip-callchain-idx.c
         tools/perf/arch/powerpc/util/sym-handling.c
         tools/perf/ui/browsers/hists.c
         tools/perf/ui/gtk/annotate.c
         tools/perf/util/cs-etm.c
         tools/perf/util/thread.c
         tools/perf/util/unwind-libunwind-local.c
         tools/perf/util/unwind-libunwind.c
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Darren Hart <dvhart@infradead.org>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Dmitriy Vyukov <dvyukov@google.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Hao Luo <haoluo@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Garry <john.g.garry@oracle.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miaoqian Lin <linmq006@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Riccardo Mancini <rickyman7@gmail.com>
      Cc: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
      Cc: Song Liu <song@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
      Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Yury Norov <yury.norov@gmail.com>
      Link: https://lore.kernel.org/r/20230320212248.1175731-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      63df0e4b
    • Ian Rogers's avatar
      perf maps: Add functions to access maps · 5ab6d715
      Ian Rogers authored
      Introduce functions to access struct maps. These functions reduce the
      number of places reference counting is necessary. While tidying APIs do
      some small const-ification, in particlar to unwind_libunwind_ops.
      
      Committer notes:
      
      Fixed up tools/perf/util/unwind-libunwind.c:
      
      -               return ops->get_entries(cb, arg, thread, data, max_stack);
      +               return ops->get_entries(cb, arg, thread, data, max_stack, best_effort);
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Darren Hart <dvhart@infradead.org>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Dmitriy Vyukov <dvyukov@google.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Hao Luo <haoluo@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Garry <john.g.garry@oracle.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miaoqian Lin <linmq006@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Riccardo Mancini <rickyman7@gmail.com>
      Cc: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
      Cc: Song Liu <song@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
      Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Yury Norov <yury.norov@gmail.com>
      Link: https://lore.kernel.org/r/20230320212248.1175731-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5ab6d715
    • Ian Rogers's avatar
      perf maps: Remove rb_node from struct map · ff583dc4
      Ian Rogers authored
      struct map is reference counted, having it also be a node in an
      red-black tree complicates the reference counting. Switch to having a
      map_rb_node which is a red-block tree node but points at the reference
      counted struct map. This reference is responsible for a single reference
      count.
      
      Committer notes:
      
      Fixed up tools/perf/util/unwind-libunwind-local.c to use map_rb_node as
      well.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Darren Hart <dvhart@infradead.org>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Dmitriy Vyukov <dvyukov@google.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Hao Luo <haoluo@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Garry <john.g.garry@oracle.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miaoqian Lin <linmq006@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Riccardo Mancini <rickyman7@gmail.com>
      Cc: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
      Cc: Song Liu <song@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
      Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Yury Norov <yury.norov@gmail.com>
      Link: https://lore.kernel.org/r/20230320212248.1175731-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ff583dc4
    • Ian Rogers's avatar
      perf map: Move map list node into symbol · 83720209
      Ian Rogers authored
      Using a perf map as a list node is only done in symbol. Move the
      list_node struct into symbol as a single pointer to the map. This makes
      reference count behavior more obvious and easy to check.
      
      Committer notes:
      
      Some changes to reduce the number of lines touched by keeping, for
      instance, the 'new_map' variable and setting it to new_node->map, so
      that we keep more of the project history in place and keep as much
      as possible the value of the 'git blame' tool.
      
      Also use map__zput() when putting a struct members, so that when we free
      the container struct we can get use-after-free errors as NULL pointer
      derefs sometimes.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Darren Hart <dvhart@infradead.org>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Dmitriy Vyukov <dvyukov@google.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Hao Luo <haoluo@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Garry <john.g.garry@oracle.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Madhavan Srinivasan <maddy@linux.ibm.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miaoqian Lin <linmq006@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Riccardo Mancini <rickyman7@gmail.com>
      Cc: Shunsuke Nakamura <nakamura.shun@fujitsu.com>
      Cc: Song Liu <song@kernel.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Stephen Brennan <stephen.s.brennan@oracle.com>
      Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Yury Norov <yury.norov@gmail.com>
      Link: https://lore.kernel.org/r/20230320212248.1175731-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      83720209
    • Ian Rogers's avatar
      perf jit: Fix a few memory leaks · dc67c783
      Ian Rogers authored
      As reported by leak sanitizer.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Brian Robbins <brianrob@linux.microsoft.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Yuan Can <yuancan@huawei.com>
      Link: https://lore.kernel.org/r/20230403203545.1872196-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      dc67c783
    • Ian Rogers's avatar
      perf build: Allow C++ demangle without libelf · 3ad45105
      Ian Rogers authored
      The cxa demangle support isn't dependent on libelf and so we no longer
      need to disable demangling if libelf isn't present.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andrii Nakryiko <andrii@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230403211021.1892231-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3ad45105
    • Ian Rogers's avatar
      perf srcline: Avoid addr2line SIGPIPEs · 75a616c6
      Ian Rogers authored
      Ignore SIGPIPEs when addr2line is configured.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Nathan Chancellor <nathan@kernel.org>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tom Rix <trix@redhat.com>
      Cc: llvm@lists.linux.dev
      Link: https://lore.kernel.org/r/20230403184033.1836023-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      75a616c6
    • Ian Rogers's avatar
      perf srcline: Support for llvm-addr2line · 2c4b9280
      Ian Rogers authored
      The sentinel value differs for llvm-addr2line. Configure this once and
      then detect when reading records.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Nathan Chancellor <nathan@kernel.org>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tom Rix <trix@redhat.com>
      Cc: llvm@lists.linux.dev
      Link: https://lore.kernel.org/r/20230403184033.1836023-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2c4b9280
    • Ian Rogers's avatar
      perf srcline: Simplify addr2line subprocess · b3801e79
      Ian Rogers authored
      Don't wrap stdin and stdout of subprocess with streams, use the api/io
      library for buffering.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Nathan Chancellor <nathan@kernel.org>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tom Rix <trix@redhat.com>
      Cc: llvm@lists.linux.dev
      Link: https://lore.kernel.org/r/20230403184033.1836023-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b3801e79
    • Ian Rogers's avatar
      tools api: Add io__getline · c9dc580c
      Ian Rogers authored
      Reads a line to allocated memory up to a newline following the getline
      API.
      
      Committer notes:
      
      It also adds this new function to the 'api io' 'perf test' entry:
      
        $ perf test "api io"
         64: Test api io                                                     : Ok
        $
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Nathan Chancellor <nathan@kernel.org>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Tom Rix <trix@redhat.com>
      Cc: llvm@lists.linux.dev
      Link: https://lore.kernel.org/r/20230403184033.1836023-2-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c9dc580c
    • Namhyung Kim's avatar
      perf intel-pt: Use perf_pmu__scan_file_at() if possible · 98b7ce0e
      Namhyung Kim authored
      Intel-PT calls perf_pmu__scan_file() a lot, let's use relative address
      when it accesses multiple files at one place.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      98b7ce0e
    • Namhyung Kim's avatar
      perf pmu: Add perf_pmu__{open,scan}_file_at() · 3a69672e
      Namhyung Kim authored
      These two helpers will also use openat() to reduce the overhead with
      relative pathnames.  Convert other functions in pmu_lookup() to use
      the new helpers.
      
      Committer testing:
      
      Before:
      
        ⬢[acme@toolbox perf-tools-next]$ perf bench internals pmu-scan
        # Running 'internals/pmu-scan' benchmark:
        Computing performance of sysfs PMU event scan for 100 times
          Average PMU scanning took: 2729.040 usec (+- 7.117 usec)
        ⬢[acme@toolbox perf-tools-next]$
      
      After:
      
        ⬢[acme@toolbox perf-tools-next]$ perf bench internals pmu-scan
        # Running 'internals/pmu-scan' benchmark:
        Computing performance of sysfs PMU event scan for 100 times
          Average PMU scanning took: 2419.870 usec (+- 9.057 usec)
        ⬢[acme@toolbox perf-tools-next]$
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3a69672e
    • Namhyung Kim's avatar
      perf pmu: Use relative path in setup_pmu_alias_list() · 46378665
      Namhyung Kim authored
      Likewise, x86 needs to traverse the PMU list to build alias.
      Let's use the new helpers to use relative paths.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      46378665
    • Namhyung Kim's avatar
      perf pmu: Use relative path in perf_pmu__caps_parse() · b39094d3
      Namhyung Kim authored
      Likewise, it needs to traverse the pmu/caps directory, let's use
      openat() with the dirfd instead of open() using the absolute path.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.org
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: LKML <linux-kernel@vger.kernel.org>
      Cc: linux-perf-users@vger.kernel.org
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b39094d3
    • Namhyung Kim's avatar
      perf pmu: Use relative path for sysfs scan · e293a5e8
      Namhyung Kim authored
      The PMU information is in the kernel sysfs so it needs to scan the
      directory to get the whole information like event aliases, formats and
      so on.  During the traversal, it opens a lot of files and directories
      like below:
      
        dir = opendir("/sys/bus/event_source/devices");
        while (dentry = readdir(dir)) {
          char buf[PATH_MAX];
      
          snprintf(buf, sizeof(buf), "%s/%s",
                   "/sys/bus/event_source/devices", dentry->d_name);
          fd = open(buf, O_RDONLY);
          ...
        }
      
      But this is not good since it needs to copy the string to build the
      absolute pathname, and it makes redundant pathname walk (from the /sys)
      unnecessarily.  We can use openat(2) to open the file in the given
      directory.  While it's not a problem ususally, it can be a problem when
      the kernel has contentions on the sysfs.
      
      Add a couple of new helper to return the file descriptor of PMU
      directory so that it can use it with relative paths.
      
       * perf_pmu__event_source_devices_fd()
         - returns a fd for the PMU root ("/sys/bus/event_source/devices")
      
       * perf_pmu__pathname_fd()
         - returns a fd for "<pmu>/<file>" under the PMU root
      
      Now the above code can be converted something like below:
      
        dirfd = perf_pmu__event_source_devices_fd();
        dir = fdopendir(dirfd);
        while (dentry = readdir(dir)) {
          fd = openat(dirfd, dentry->d_name, O_RDONLY);
          ...
        }
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e293a5e8
    • Namhyung Kim's avatar
      perf bench: Add pmu-scan benchmark · f6a7bbbf
      Namhyung Kim authored
      The pmu-scan benchmark will repeatedly scan the sysfs to get the
      available PMU information.
      
        $ ./perf bench internals pmu-scan
        # Running 'internals/pmu-scan' benchmark:
        Computing performance of sysfs PMU event scan for 100 times
          Average PMU scanning took: 6850.990 usec (+- 48.445 usec)
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f6a7bbbf
    • Namhyung Kim's avatar
      perf pmu: Add perf_pmu__destroy() function · eec11310
      Namhyung Kim authored
      It seems there's no function to delete the perf pmu struct.  Add the
      perf_pmu__destroy() to do the job.  While at it, add some more helper
      functions to delete pmu aliases and caps.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      eec11310
    • Namhyung Kim's avatar
      perf tools: Fix a asan issue in parse_events_multi_pmu_add() · 66c9598b
      Namhyung Kim authored
      In the parse_events_multi_pmu_add() it passes the 'config' variable
      twice to parse_events_term__num() - one for config and another for
      loc_term.  I'm not sure about the second one as it's converted to
      YYLTYPE variable.  Asan reports it like below:
      
        In function ‘parse_events_term__num’,
            inlined from ‘parse_events_multi_pmu_add’ at util/parse-events.c:1602:6:
        util/parse-events.c:2653:64: error: array subscript ‘YYLTYPE[0]’ is partly outside
                                            array bounds of ‘char[8]’ [-Werror=array-bounds]
         2653 |                 .err_term  = loc_term ? loc_term->first_column : 0,
              |                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
        util/parse-events.c: In function ‘parse_events_multi_pmu_add’:
        util/parse-events.c:1587:15: note: object ‘config’ of size 8
         1587 |         char *config;
              |               ^~~~~~
        cc1: all warnings being treated as errors
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      66c9598b
    • Namhyung Kim's avatar
      perf list: Use relative path for tracepoint scan · 00462d8e
      Namhyung Kim authored
      Committer notes:
      
      Added missing #include <unistd.h> for the close() prototype to fix this
      on Alma Linux 8:
      
         1    21.54 almalinux:8                   : FAIL gcc version 8.5.0 20210514 (Red Hat 8.5.0-16) (GCC)
          util/print-events.c: In function 'print_tracepoint_events':
          util/print-events.c:103:4: error: implicit declaration of function 'close'; did you mean 'clone'? [-Werror=implicit-function-declaration]
              close(evt_fd);
              ^~~~~
              clone
      
      Also use the newly added scandirat feature test to check if that
      function is available, providing a HAVE_SCANDIRAT_SUPPORT conditional
      warning to the user if it isn't available.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20230331202949.810326-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      00462d8e
    • Arnaldo Carvalho de Melo's avatar
      tools build: Add a feature test for scandirat(), that is not implemented so far in musl and uclibc · 9e03608e
      Arnaldo Carvalho de Melo authored
      We use it just when listing tracepoint events, and for root, so just
      emit a warning about it to get users to ask the library maintainers to
      implement it, as suggested in this systemd ticket:
      
       https://github.com/systemd/casync/issues/129
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: https://lore.kernel.org/lkml/ZCwv4z5Dh%2FdHUMG6@kernel.org/Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9e03608e
    • Adrian Hunter's avatar
      perf intel-pt: Fix CYC timestamps after standalone CBR · 430635a0
      Adrian Hunter authored
      After a standalone CBR (not associated with TSC), update the cycles
      reference timestamp and reset the cycle count, so that CYC timestamps
      are calculated relative to that point with the new frequency.
      
      Fixes: cc336186 ("perf tools: Add Intel PT support for decoding CYC packets")
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230403154831.8651-2-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      430635a0
    • Adrian Hunter's avatar
      perf auxtrace: Fix address filter entire kernel size · 1f9f33cc
      Adrian Hunter authored
      kallsyms is not completely in address order.
      
      In find_entire_kern_cb(), calculate the kernel end from the maximum
      address not the last symbol.
      
      Example:
      
       Before:
      
          $ sudo cat /proc/kallsyms | grep ' [twTw] ' | tail -1
          ffffffffc00b8bd0 t bpf_prog_6deef7357e7b4530    [bpf]
          $ sudo cat /proc/kallsyms | grep ' [twTw] ' | sort | tail -1
          ffffffffc15e0cc0 t iwl_mvm_exit [iwlmvm]
          $ perf.d093603a05aa record -v --kcore -e intel_pt// --filter 'filter *' -- uname |& grep filter
          Address filter: filter 0xffffffff93200000/0x2ceba000
      
       After:
      
          $ perf.8fb0f7a01f8e record -v --kcore -e intel_pt// --filter 'filter *' -- uname |& grep filter
          Address filter: filter 0xffffffff93200000/0x2e3e2000
      
      Fixes: 1b36c03e ("perf record: Add support for using symbols in address filters")
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: stable@vger.kernel.org
      Link: https://lore.kernel.org/r/20230403154831.8651-2-adrian.hunter@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1f9f33cc