[GIT,PULL] perf tools changes for v6.2: 1st batch

Message ID 20221216143609.186415-1-acme@kernel.org
State New
Headers
Series [GIT,PULL] perf tools changes for v6.2: 1st batch |

Pull-request

git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-tools-for-v6.2-1-2022-12-16

Message

Arnaldo Carvalho de Melo Dec. 16, 2022, 2:36 p.m. UTC
  Hi Linus,

	This time there is a trivial resolution of a merge conflict
related to commit c302378bc157f6a7 ("libbpf: Hashmap interface update to
allow both long and void* keys/values"), that touched tools/perf/ files.

	Please consider pulling,

Best regards,

- Arnaldo

The following changes since commit 84e57d292203a45c96dbcb2e6be9dd80961d981a:

  Merge tag 'exfat-for-6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat (2022-12-15 18:14:21 -0800)

are available in the Git repository at:

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-tools-for-v6.2-1-2022-12-16

for you to fetch changes up to 4ff17c448a7b0f437a17622d67f1c5c609c3a0e9:

  libperf: Fix install_pkgconfig target (2022-12-16 10:04:06 -0300)

----------------------------------------------------------------
perf tools changes for v6.2: 1st batch

Libraries:

- Drop the old copy of libtraceevent in tools/lib/traceevent/ now that all major distros
  ship it from its external repository.

  This is now just another feature detection, emitting a warning when the
  libtraceevent-dev[el] package isn't installed, disabling the build of perf features
  and tools that strictly require parsing things from tracefs while keeping
  the core functionality present and working with a subset of the events, the
  most used ones like CPU cycles, hardware cache and also vendor events, etc.

  This was tested with lots of containers for Fedora, Debian, OpenSUSE, Alpine Linux,
  Ubuntu, with cross builds, etc.

Build:

- Update to C standard to gnu11, like was done for the kernel.

- Install the tools/lib/ libraries locally instead of having headers searched
  directly from the source code directories, to help the cases where we can
  build either from in-kernel source libraries or from the same library shipped
  as a distro package, as is the case with libbpf and was the case with
  libtraceevent.

perf stat:

- Do not delay the workload with --delay, the delay is just for starting to count
  the events, to skip noise at workload startup.

- When we have events for each cgroup, the metric should be printed for each
  cgroup separately.

  $ perf stat -a --for-each-cgroup system.slice,user.slice --metric-only sleep 1

   Performance counter stats for 'system wide':

                   GHz  insn per cycle  branch-misses of all branches
   system.slice  3.792      0.61                  3.24%
   user.slice    3.661      2.32                  0.37%

- Fix printing field separator in CSV metrics output.

- Fix --metric-only --json output.

- Fix summary output in CSV with --metric-only.

- Update event group check for support of uncore event.

perf test:

- Stop requiring a C toolchain in shell tests, instead add a workload option that has
  all the previously C snippets built as part of 'perf test -w' that then get used in
  the 'perf test' shell scripts.

- Add event group test for events in multiple PMUs

- The "kernel lock contention analysis" test should not print warnings in quiet mode.

- Add attr tests for ARM64's new VG register.

- Fix record test on KVM guests, as using precise flag with the
  br_inst_retired.near_call event causes the test fail on KVM guests, even when
  the guests have PMU forwarding enabled and the event itself is supported, so just
  remove the precise flag from the event.

- Add mechanism for skipping attr tests on specific kernel versions where it is known that
  these checks will fail.

- Skip watchpoint tests if no watchpoints available.

- Add more Intel PT 'perf test' entries: hybrid CPUs, split the packet decoder
  into a suite of subtests.

perf script:

- Introduce task analyzer python script, where one first records some events:

Recording can be done in two ways:

  $ perf script record tasks-analyzer -- sleep 10
  $ perf record -e sched:sched_switch -a -- sleep 10

The script can parse any perf.data files, as long as it has sched:sched_switch events,
other events will be ignored.

The most simple report use case is to just call the script without arguments.

Runtime is the time the task was running on the CPU, Time Out-In is the time
between the process being scheduled *out* and scheduled back *in*. So the last
time span between two executions:

  $ perf script report tasks-analyzer
      Switched-In     Switched-Out CPU    PID    TID             Comm  Runtime  Time Out-In
  15576.658891407  15576.659156086   4   2412   2428            gdbus      265         1949
  15576.659111320  15576.659455410   0   2412   2412      gnome-shell      344         2267
  15576.659491326  15576.659506173   2     74     74      kworker/2:1       15        13145
  15576.659506173  15576.659825748   2   2858   2858  gnome-terminal-      320        63263
  15576.659871270  15576.659902872   6  20932  20932    kworker/u16:0       32      2314582
  15576.659909951  15576.659945501   3  27264  27264               sh       36           -1
  15576.659853285  15576.659971052   7  27265  27265             perf      118      5050741
  [...]

perf lock:

- Allow concurrent record and report to support live monitoring of kernel lock
  contention without BPF:

  # perf lock record -a -o- sleep 1 | perf lock contention -i-
   contended   total wait     max wait     avg wait         type   caller

           2     10.27 us      6.17 us      5.13 us     spinlock   load_balance+0xc03
           1      5.29 us      5.29 us      5.29 us     rwlock:W   ep_scan_ready_list+0x54
           1      4.12 us      4.12 us      4.12 us     spinlock   smpboot_thread_fn+0x116
           1      3.28 us      3.28 us      3.28 us        mutex   pipe_read+0x50

- Implement -t/--threads option when using BPF:

  $ sudo ./perf lock contention -abt -E 5 sleep 1
   contended  total wait   max wait   avg wait      pid  comm

           1   740.66 ms  740.66 ms  740.66 ms     1950  nv_queue
           3   305.50 ms  298.19 ms  101.83 ms     1884  nvidia-modeset/
           1    25.14 us   25.14 us   25.14 us  2725038  EventManager_De
          12    23.09 us    9.30 us    1.92 us        0  swapper
           1    20.18 us   20.18 us   20.18 us  2725033  EventManager_De

- Add -l/--lock-addr to aggregate per-lock-instance contention:

  $ sudo ./perf lock contention -abl sleep 1
   contended  total wait  max wait  avg wait           address  symbol

           1    36.28 us  36.28 us  36.28 us  ffff92615d6448b8
           9    10.91 us   1.84 us   1.21 us  ffffffffbaed50c0  rcu_state
           1    10.49 us  10.49 us  10.49 us  ffff9262ac4f0c80
           8     4.68 us   1.67 us    585 ns  ffffffffbae07a40  jiffies_lock
           3     3.03 us   1.45 us   1.01 us  ffff9262277861e0
           1      924 ns    924 ns    924 ns  ffff926095ba9d20
           1      436 ns    436 ns    436 ns  ffff9260bfda4f60

perf record:

- Add remaining branch filters: "no_cycles", "no_flags" & "hw_index", to be
  used with hardware such as Intel's LBR that allows things like stitching
  stacks of two samples to overcome the limits of the number of LBR registers.

Symbol resolution:

- Handle .debug files created with 'objcopy --only-keep-debug', where program
  headers are zeroed and thus can't be used for adjustments, use the info in
  the runtime_ss (runtime ELF) instead.

perf trace:

- Add BPF based augmenter for the 'perf_event_open's 'struct perf_event_attr' argument.

- Add BPF based augmenter for the 'clock_gettime's 'struct timespec' argument.

- In both cases the syscall tracepoint has just the pointer value, we
  need to hook a BPF program to collect the pointer contents, and then,
  in userspace, pretty print it in 'perf trace'.

perf list:

- Introduce JSON output of events.

- Streamline how the expression specifying what events should be shown is handled,
  fixing several corner cases, such as the metric filter that is specified as a glob
  but was using strstr().

perf probe:

- Fix to avoid crashing if DW_AT_decl_file is NULL, coping with clang generating
  DWARF5 like that.

- Use dwarf_attr_integrate() as generic DWARF attr accessor as it supersedes dwarf_attr(),
  supporting abstact origin DIEs.

perf inject:

- Set PERF_RECORD_MISC_BUILD_ID_SIZE in the PERF_RECORD_HEADER_BUILD_ID so that
  perf.data readers can get the real build-id size and avoid trailing zeros.

perf data:

- Add tracepoint fields when converting a perf.data file to JSON.

arm64:

- Fix mksyscalltbl, don't lose syscalls due to sort -nu.

- Add Arm Neoverse V2 PMU events.

riscv:

- Add riscv sbi firmware std event files.

- Add Sifive U74 vendor events (JSON) file.

- Add some more events and metrics for Alderlake/Alderlake-N.

Documentation:

- Add data documentation for the PMU structs in the C source code.

Miscellaneous:

- Periodic sanitization of headers, adding missing includes, removing needless ones,
  creating new ones, etc.

- Use sig_atomic_t for signal handlers to avoid undefined behaviour in all perf
  tools.

- Fixes for libbpf 1.0+ compatibility (maps, etc) on 'perf trace' BPF examples.

- Remove some old perf bpf examples, leave the best ones that demonstrate how
  to associate BPF functions to points in the kernel.

- Make quiet mode consistent between tools.

- Use dedicated non-atomic clear/set bit helpers.

- Use "grep -E" instead of "egrep" as recommended by warning emitted by GNU
  grep since at least version 3.8.

- Complete list of supported subcommands in the 'perf daemon' help message.

- Update John Garry's email address for arm64 perf tooling on the MAINTAINERS file,
  he moved from Huawei to Oracle.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

----------------------------------------------------------------
Adrian Hunter (4):
      perf scripts python: intel-pt-events.py: Add ability interleave output
      perf intel-pt: Start turning intel-pt-pkt-decoder-test.c into a suite of intel-pt subtests
      perf intel-pt: Redefine test_suite to allow for adding more subtests
      perf intel-pt: Add hybrid CPU compatibility test

Ajay Kaher (1):
      perf symbol: correction while adjusting symbol

Alexander Gordeev (1):
      libperf: Fix install_pkgconfig target

Anshuman Khandual (1):
      perf record: Add remaining branch filters: "no_cycles", "no_flags" & "hw_index"

Arnaldo Carvalho de Melo (28):
      perf unwind arm64: Remove needless event.h & thread.h includes
      perf arch x86: Add missing stdlib.h to get free() prototype
      perf scripting python: Add missing util/perf_regs.h include to get perf_reg_name() prototype
      perf event: Drop perf_regs.h include, not needed anymore
      perf bpf: No need to include compiler.h when HAVE_LIBBPF_SUPPORT is true
      perf bpf: No need to include headers just use forward declarations
      perf branch: Remove some needless headers, add a needed one
      perf tools: Move 'struct perf_sample' to a separate header file to disentangle headers
      perf kwork: Remove includes not needed in kwork.h
      perf machine: Move machine__resolve() from event.h
      perf symbol: Move addr_location__put() from event.h
      perf thread: Move thread__resolve() from event.h
      perf tests: Add missing event.h include
      perf mmap: Remove several unneeded includes from util/mmap.h
      perf evlist: Add missing util/event.h header
      Merge remote-tracking branch 'torvalds/master' into perf/core
      perf examples bpf: Remove augmented_syscalls.c, the raw_syscalls one should be used instead
      perf bpf: Rename perf_include_dir to libbpf_include_dir
      perf trace: Add BPF augmenter to perf_event_open()'s 'struct perf_event_attr' arg
      perf trace: Add augmenter for clock_gettime's rqtp timespec arg
      Merge remote-tracking branch 'torvalds/master' into perf/core
      libperf: Remove recursive perf/cpumap.h include from perf/cpumap.h
      libperf: Add missing 'struct perf_cpu_map' forward declaration to perf/cpumap.h
      Merge remote-tracking branch 'torvalds/master' into perf/core
      Merge remote-tracking branch 'torvalds/master' into perf/core
      machine: Adopt is_lock_function() from builtin-lock.c
      perf tools: Check if libtracevent has TEP_FIELD_IS_RELATIVE
      Merge remote-tracking branch 'torvalds/master' into perf/core

Athira Rajeev (2):
      perf stat: Fix printing field separator in CSV metrics output
      perf test: Update event group check for support of uncore event

Dmitrii Dolgov (1):
      perf data: Add tracepoint fields when converting to JSON

Hagen Paul Pfeifer (1):
      perf script: Introduce task analyzer python script

Hans-Peter Nilsson (1):
      perf arm64: Fix mksyscalltbl, don't lose syscalls due to sort -nu

Ian Rogers (61):
      perf test: Parse events workaround for dash/minus
      perf build: Update to C standard to gnu11
      perf record: Use sig_atomic_t for signal handlers
      perf daemon: Use sig_atomic_t to avoid UB
      perf ftrace: Use sig_atomic_t to avoid UB
      perf session: Change type to avoid undefined behaviour in a signal handler
      perf stat: Use sig_atomic_t to avoid undefined behaviour in a signal handler
      perf top: Use sig_atomic_t to avoid undefined behaviour in a signal handler
      perf trace: Use sig_atomic_t to avoid undefined behaviour in a signal handler
      perf trace: Raw augmented syscalls fix libbpf 1.0+ compatibility
      perf trace: hello fix libbpf 1.0+ compatibility
      perf trace: empty fix libbpf 1.0+ compatibility
      perf trace: 5sec fix libbpf 1.0+ compatibility
      perf bpf: Remove now unused BPF headers
      perf pmu: Remove mostly unused 'struct perf_pmu' 'is_hybrid' member
      perf pmu: Add data structure documentation
      tools lib api fs tracing_path: Add scandir alphasort
      perf tracepoint: Sort events in iterator
      perf list: Generalize limiting to a PMU name
      perf list: Simplify cache event printing
      perf list: Simplify symbol event printing
      perf pmu: Restructure print_pmu_events() to avoid memory allocations
      tools lib api: Add install target
      tools lib subcmd: Add install target
      perf build: Install libsubcmd locally when building
      perf build: Install libapi locally when building
      perf build: Install libperf locally when building
      perf build: Install libtraceevent locally when building
      tools lib api: Add missing install headers
      tools lib perf: Add missing install headers
      tool lib symbol: Add Makefile/Build
      perf build: Install libsymbol locally when building
      perf expr: Tidy hashmap dependency
      perf thread_map: Reduce exposure of libperf internal API
      perf cpumap: Tidy libperf includes
      perf build: Use tools/lib headers from install path
      tools lib api: Clean up install_headers
      tools lib bpf: Avoid install_headers make warning
      tools lib symbol: Clean up build output
      tools lib perf: Make install_headers clearer
      tools lib subcmd: Make install_headers clearer
      tools lib traceevent: Make install_headers clearer
      perf build: Fix LIBTRACEEVENT_DYNAMIC
      perf list: Reorganize to use callbacks to allow honouring command line options
      perf list: Add JSON output option
      perf list: Support newlines in wordwrap
      perf list: JSON escape encoding improvements
      perf list: List callback support for libpfm
      perf stat: Check existence of os->prefix, fixing a segfault
      tools lib api: Add dependency test to install_headers
      tools lib perf: Add dependency test to install_headers
      tools lib subcmd: Add dependency test to install_headers
      tools lib symbol: Add dependency test to install_headers
      perf util: Make header guard consistent with tool
      perf util: Add host_is_bigendian to util.h
      perf build: Fixes for LIBTRACEEVENT_DYNAMIC
      perf jevents: Parse metrics during conversion
      perf build: Use libtraceevent from the system
      tools lib traceevent: Remove libtraceevent
      perf build: Fix python/perf.so library's name
      perf evlist: Remove group option.

James Clark (14):
      perf tools: Fix "kernel lock contention analysis" test by not printing warnings in quiet mode
      perf tools: Make quiet mode consistent between tools
      perf vendor events: Add Arm Neoverse V2 PMU events
      perf branch: Fix interpretation of branch records
      perf stat: Fix invalid output handle
      perf cs-etm: Print unknown header version as an error
      perf cs-etm: Remove unused stub methods
      perf cs-etm: Tidy up auxtrace info header printing
      perf cs-etm: Cleanup cs_etm__process_auxtrace_info()
      perf cs-etm: Print auxtrace info even if OpenCSD isn't linked
      perf test: Add ability to test exit code for attr tests
      perf test: Add mechanism for skipping attr tests on auxiliary vector values
      perf test: Add mechanism for skipping attr tests on kernel versions
      perf test arm64: Add attr tests for new VG register

John Garry (1):
      MAINTAINERS: Update John Garry's email address for arm64 perf tooling

Kang Minchul (1):
      perf print-events: Remove redundant comparison with zero

Khem Raj (1):
      perf python: Account for multiple words in CC

Leo Yan (5):
      perf trace: Use macro RAW_SYSCALL_ARGS_NUM to replace number
      perf trace: Return error if a system call doesn't exist
      perf trace: Handle failure when trace point folder is missed
      perf augmented_raw_syscalls: Remove unused variable 'syscall'
      perf trace: Remove unused bpf map 'syscalls'

Masami Hiramatsu (Google) (4):
      perf probe: Fix to avoid crashing if DW_AT_decl_file is NULL
      perf probe: Use dwarf_attr_integrate as generic DWARF attr accessor
      perf probe: Fix to get declared file name from clang DWARF5
      perf probe: Fix to get the DW_AT_decl_file and DW_AT_call_file as unsinged data

Michael Petlan (1):
      perf test: Fix record test on KVM guests

Namhyung Kim (100):
      perf tools: Save evsel->pmu in parse_events()
      perf tools: Use pmu info in evsel__is_hybrid()
      perf stat: Use evsel__is_hybrid() more
      perf stat: Add aggr id for global mode
      perf stat: Add cpu aggr id for no aggregation mode
      perf stat: Add 'needs_sort' argument to cpu_aggr_map__new()
      perf stat: Add struct perf_stat_aggr to perf_stat_evsel
      perf stat: Allocate evsel->stats->aggr properly
      perf stat: Aggregate events using evsel->stats->aggr
      perf stat: Factor out evsel__count_has_error()
      perf stat: Aggregate per-thread stats using evsel->stats->aggr
      perf stat: Allocate aggr counts for recorded data
      perf stat: Reset aggr counts for each interval
      perf stat: Split process_counters() to share it with process_stat_round_event()
      perf stat: Add perf_stat_merge_counters()
      perf stat: Add perf_stat_process_percore()
      perf stat: Add perf_stat_process_shadow_stats()
      perf stat: Display event stats using aggr counts
      perf stat: Display percore events properly
      perf stat: Remove unused perf_counts.aggr field
      perf test: Do not use instructions:u explicitly
      perf test: Fix shellcheck issues in the record test
      perf test: Use a test program in 'perf record' tests
      perf test: Wait for a new thread when testing --per-thread record
      perf test: Add system-wide mode in 'perf record' tests
      perf test: Add target workload test in 'perf record' tests
      perf test: Test record with --threads option
      perf test: Do not set TEST_SKIP for record subtests
      perf lock contention: Fix memory sanitizer issue
      perf lock contention: Check --max-stack option
      perf lock contention: Avoid variable length arrays
      perf lock contention: Increase default stack skip to 4
      perf lock: Allow concurrent record and report
      perf stat: Increase metric length to align outputs
      perf stat: Clear screen only if output file is a tty
      perf stat: Move common code in print_metric_headers()
      perf stat: Fix --metric-only --json output
      perf stat: Do not indent headers for JSON
      perf stat: Add header for interval in JSON output
      perf stat: Fix condition in print_interval()
      perf stat: Consolidate condition to print metrics
      perf stat: Fix summary output in CSV with --metric-only
      perf stat: Add missing separator in the CSV header
      perf stat: Clear screen only if output file is a tty
      perf stat: Split print_running() function
      perf stat: Split print_noise_pct() function
      perf stat: Split print_cgroup() function
      perf stat: Split aggr_printout() function
      perf stat: Factor out print_counter_value() function
      perf stat: Handle bad events in abs_printout()
      perf stat: Add before_metric argument
      perf stat: Align cgroup names
      perf stat: Split print_metric_headers() function
      perf stat: Factor out prepare_interval()
      perf stat: Cleanup interval print alignment
      perf stat: Remove impossible condition
      perf stat: Rework header display
      perf stat: Move condition to print_footer()
      perf stat: Factor out prefix display
      perf stat: Factor out print_metric_{begin,end}()
      perf stat: Support --for-each-cgroup and --metric-only
      perf stat: Add print_aggr_cgroup() for --for-each-cgroup and --topdown
      perf test: Add -w/--workload option
      perf test: Replace pipe test workload with noploop
      perf test: Add 'thloop' test workload
      perf test: Replace record test workload with thloop
      perf test: Add 'leafloop' test workload
      perf test: Replace arm callgraph fp test workload with leafloop
      perf test: Add 'sqrtloop' test workload
      perf test: Replace arm spe fork test workload with sqrtloop
      perf test: Add 'brstack' test workload
      perf test: Replace brstack test workload
      perf test: Add 'datasym' test workload
      perf test: Replace data symbol test workload with datasym
      perf inject: Set PERF_RECORD_MISC_BUILD_ID_SIZE
      perf lock contention: Do not use BPF task local storage
      perf stat: Fix cgroup display in JSON output
      perf stat: Move summary prefix printing logic in CSV output
      perf stat: Do not align time prefix in CSV output
      perf stat: Use scnprintf() in prepare_interval()
      perf stat: Remove prefix argument in print_metric_headers()
      perf stat: Remove metric_only argument in print_counter_aggrdata()
      perf stat: Pass const char *prefix to display routines
      perf stat: Use 'struct outstate' in evlist__print_counters()
      perf stat: Pass 'struct outstate' to print_metric_begin()
      perf stat: Pass struct outstate to printout()
      perf stat: Do not pass runtime_stat to printout()
      perf stat: Pass through 'struct outstate'
      perf stat: Fix JSON output in metric-only mode
      perf stat: Rename "aggregate-number" to "cpu-count" in JSON
      perf stat: Tidy up JSON metric-only output when no metrics
      Revert "perf stat: Rename "aggregate-number" to "cpu-count" in JSON"
      perf stat: Fix multi-line metric output in JSON
      perf stat: Update event skip condition for system-wide per-thread mode and merged uncore and hybrid events
      perf off_cpu: Fix a typo in BTF tracepoint name, it should be 'btf_trace_sched_switch'
      perf lock contention: Add lock_data.h for common data
      perf lock contention: Implement -t/--threads option for BPF
      perf lock contention: Add -l/--lock-addr option
      perf test: Update perf lock contention test
      perf stat: Do not delay the workload with --delay

Naveen N. Rao (1):
      perf test: Skip watchpoint tests if no watchpoints available

Nikita Shubin (3):
      perf tools riscv: Add support for get_cpuid_str function
      perf arch events: riscv sbi firmware std event files
      perf vendor events riscv: add Sifive U74 JSON file

Petar Gligoric (2):
      perf script: task-analyzer add csv support
      perf test: add new task-analyzer tests

Ravi Bangoria (2):
      perf tool: Move pmus list variable to a new file
      perf test: Add event group test for events in multiple PMUs

Sean Christopherson (1):
      perf tools: Use dedicated non-atomic clear/set bit helpers

Tiezhu Yang (1):
      perf tools: Use "grep -E" instead of "egrep"

Yang Jihong (2):
      perf daemon: Complete list of supported subcommand in help message
      perf config: Add missing newline on pr_warning() call in home_perfconfig()

Zhengjun Xing (4):
      perf vendor events intel: Add core event list for Alderlake-N
      perf vendor events intel: Add uncore event list for Alderlake-N
      perf vendor events intel: Add metrics for Alderlake-N
      perf vendor events intel: Update events and metrics for alderlake

 MAINTAINERS                                        |    2 +-
 tools/lib/api/Makefile                             |   66 +
 tools/lib/api/fs/tracing_path.c                    |   16 +
 tools/lib/api/fs/tracing_path.h                    |    1 +
 tools/lib/bpf/Makefile                             |    1 +
 tools/lib/perf/Makefile                            |   37 +-
 tools/lib/perf/include/perf/cpumap.h               |    3 +-
 tools/lib/subcmd/Makefile                          |   52 +
 tools/lib/symbol/Build                             |    1 +
 tools/lib/symbol/Makefile                          |  122 +
 tools/lib/traceevent/.gitignore                    |    4 -
 tools/lib/traceevent/Build                         |    8 -
 tools/lib/traceevent/Documentation/Makefile        |  207 -
 tools/lib/traceevent/Documentation/asciidoc.conf   |  120 -
 .../Documentation/libtraceevent-commands.txt       |  153 -
 .../Documentation/libtraceevent-cpus.txt           |   77 -
 .../Documentation/libtraceevent-endian_read.txt    |   78 -
 .../Documentation/libtraceevent-event_find.txt     |  103 -
 .../Documentation/libtraceevent-event_get.txt      |   99 -
 .../Documentation/libtraceevent-event_list.txt     |  122 -
 .../Documentation/libtraceevent-event_print.txt    |  130 -
 .../Documentation/libtraceevent-field_find.txt     |  118 -
 .../Documentation/libtraceevent-field_get_val.txt  |  122 -
 .../Documentation/libtraceevent-field_print.txt    |  126 -
 .../Documentation/libtraceevent-field_read.txt     |   81 -
 .../Documentation/libtraceevent-fields.txt         |  105 -
 .../Documentation/libtraceevent-file_endian.txt    |   91 -
 .../Documentation/libtraceevent-filter.txt         |  209 -
 .../Documentation/libtraceevent-func_apis.txt      |  183 -
 .../Documentation/libtraceevent-func_find.txt      |   88 -
 .../Documentation/libtraceevent-handle.txt         |  101 -
 .../Documentation/libtraceevent-header_page.txt    |  102 -
 .../Documentation/libtraceevent-host_endian.txt    |  104 -
 .../Documentation/libtraceevent-long_size.txt      |   78 -
 .../Documentation/libtraceevent-page_size.txt      |   82 -
 .../Documentation/libtraceevent-parse_event.txt    |   90 -
 .../Documentation/libtraceevent-parse_head.txt     |   82 -
 .../Documentation/libtraceevent-plugins.txt        |  122 -
 .../Documentation/libtraceevent-record_parse.txt   |  137 -
 .../libtraceevent-reg_event_handler.txt            |  156 -
 .../Documentation/libtraceevent-reg_print_func.txt |  155 -
 .../Documentation/libtraceevent-set_flag.txt       |  104 -
 .../Documentation/libtraceevent-strerror.txt       |   85 -
 .../Documentation/libtraceevent-tseq.txt           |  158 -
 .../lib/traceevent/Documentation/libtraceevent.txt |  192 -
 .../lib/traceevent/Documentation/manpage-1.72.xsl  |   14 -
 .../lib/traceevent/Documentation/manpage-base.xsl  |   35 -
 .../Documentation/manpage-bold-literal.xsl         |   17 -
 .../traceevent/Documentation/manpage-normal.xsl    |   13 -
 .../Documentation/manpage-suppress-sp.xsl          |   21 -
 tools/lib/traceevent/Makefile                      |  300 -
 tools/lib/traceevent/event-parse-api.c             |  333 -
 tools/lib/traceevent/event-parse-local.h           |  123 -
 tools/lib/traceevent/event-parse.c                 | 7624 --------------------
 tools/lib/traceevent/event-parse.h                 |  750 --
 tools/lib/traceevent/event-plugin.c                |  711 --
 tools/lib/traceevent/event-utils.h                 |   67 -
 tools/lib/traceevent/kbuffer-parse.c               |  809 ---
 tools/lib/traceevent/kbuffer.h                     |   68 -
 tools/lib/traceevent/libtraceevent.pc.template     |   10 -
 tools/lib/traceevent/parse-filter.c                | 2281 ------
 tools/lib/traceevent/parse-utils.c                 |   71 -
 tools/lib/traceevent/plugins/Build                 |   12 -
 tools/lib/traceevent/plugins/Makefile              |  225 -
 tools/lib/traceevent/plugins/plugin_cfg80211.c     |   43 -
 tools/lib/traceevent/plugins/plugin_function.c     |  282 -
 tools/lib/traceevent/plugins/plugin_futex.c        |  123 -
 tools/lib/traceevent/plugins/plugin_hrtimer.c      |   74 -
 tools/lib/traceevent/plugins/plugin_jbd2.c         |   61 -
 tools/lib/traceevent/plugins/plugin_kmem.c         |   80 -
 tools/lib/traceevent/plugins/plugin_kvm.c          |  527 --
 tools/lib/traceevent/plugins/plugin_mac80211.c     |   88 -
 tools/lib/traceevent/plugins/plugin_sched_switch.c |  146 -
 tools/lib/traceevent/plugins/plugin_scsi.c         |  434 --
 tools/lib/traceevent/plugins/plugin_tlb.c          |   66 -
 tools/lib/traceevent/plugins/plugin_xen.c          |  138 -
 tools/lib/traceevent/tep_strerror.c                |   53 -
 tools/lib/traceevent/trace-seq.c                   |  249 -
 tools/lib/traceevent/trace-seq.h                   |   55 -
 tools/perf/.gitignore                              |    7 +-
 tools/perf/Build                                   |   20 +-
 tools/perf/Documentation/perf-annotate.txt         |    2 +-
 tools/perf/Documentation/perf-diff.txt             |    2 +-
 tools/perf/Documentation/perf-intel-pt.txt         |   12 +-
 tools/perf/Documentation/perf-list.txt             |   10 +-
 tools/perf/Documentation/perf-lock.txt             |    6 +-
 tools/perf/Documentation/perf-probe.txt            |    2 +-
 tools/perf/Documentation/perf-record.txt           |   11 +-
 tools/perf/Documentation/perf-report.txt           |    2 +-
 tools/perf/Documentation/perf-stat.txt             |    4 +-
 tools/perf/Documentation/perf-top.txt              |    7 +-
 tools/perf/MANIFEST                                |    4 +-
 tools/perf/Makefile                                |    2 +-
 tools/perf/Makefile.config                         |   62 +-
 tools/perf/Makefile.perf                           |  170 +-
 tools/perf/arch/arm/util/unwind-libdw.c            |    2 +-
 tools/perf/arch/arm64/entry/syscalls/mksyscalltbl  |    2 +-
 tools/perf/arch/arm64/util/Build                   |    2 +-
 tools/perf/arch/arm64/util/machine.c               |    1 +
 tools/perf/arch/arm64/util/pmu.c                   |    1 +
 tools/perf/arch/arm64/util/unwind-libdw.c          |    2 +-
 tools/perf/arch/powerpc/util/Build                 |    2 +-
 tools/perf/arch/powerpc/util/event.c               |    1 +
 tools/perf/arch/powerpc/util/unwind-libdw.c        |    2 +-
 tools/perf/arch/riscv/util/Build                   |    1 +
 tools/perf/arch/riscv/util/header.c                |  104 +
 tools/perf/arch/s390/util/Build                    |    2 +-
 tools/perf/arch/s390/util/unwind-libdw.c           |    1 +
 tools/perf/arch/x86/include/arch-tests.h           |    1 +
 tools/perf/arch/x86/tests/Build                    |    2 +-
 tools/perf/arch/x86/tests/arch-tests.c             |   15 +-
 ...intel-pt-pkt-decoder-test.c => intel-pt-test.c} |  154 +
 tools/perf/arch/x86/tests/sample-parsing.c         |    1 +
 tools/perf/arch/x86/util/Build                     |    2 +-
 tools/perf/arch/x86/util/event.c                   |    2 +
 tools/perf/arch/x86/util/intel-pt.c                |    4 +
 tools/perf/arch/x86/util/iostat.c                  |    4 +-
 tools/perf/arch/x86/util/tsc.c                     |    1 +
 tools/perf/arch/x86/util/unwind-libdw.c            |    2 +-
 tools/perf/bench/inject-buildid.c                  |    2 +-
 tools/perf/bench/numa.c                            |    9 +-
 tools/perf/builtin-annotate.c                      |    4 +-
 tools/perf/builtin-daemon.c                        |    4 +-
 tools/perf/builtin-data.c                          |    5 +-
 tools/perf/builtin-diff.c                          |    2 +-
 tools/perf/builtin-ftrace.c                        |    4 +-
 tools/perf/builtin-inject.c                        |    8 +
 tools/perf/builtin-kmem.c                          |    1 +
 tools/perf/builtin-kvm.c                           |   12 +-
 tools/perf/builtin-kwork.c                         |    7 +
 tools/perf/builtin-list.c                          |  565 +-
 tools/perf/builtin-lock.c                          |  251 +-
 tools/perf/builtin-mem.c                           |    1 +
 tools/perf/builtin-probe.c                         |    7 +-
 tools/perf/builtin-record.c                        |   14 +-
 tools/perf/builtin-report.c                        |   11 +-
 tools/perf/builtin-script.c                        |   23 +-
 tools/perf/builtin-stat.c                          |  250 +-
 tools/perf/builtin-timechart.c                     |    1 +
 tools/perf/builtin-top.c                           |    6 +-
 tools/perf/builtin-trace.c                         |  153 +-
 tools/perf/builtin-version.c                       |    1 +
 tools/perf/examples/bpf/5sec.c                     |    8 +-
 tools/perf/examples/bpf/augmented_raw_syscalls.c   |  175 +-
 tools/perf/examples/bpf/augmented_syscalls.c       |  169 -
 tools/perf/examples/bpf/empty.c                    |   13 +-
 tools/perf/examples/bpf/etcsnoop.c                 |   76 -
 tools/perf/examples/bpf/hello.c                    |   24 +-
 tools/perf/include/bpf/bpf.h                       |   70 -
 tools/perf/include/bpf/linux/socket.h              |   24 -
 tools/perf/include/bpf/pid_filter.h                |   21 -
 tools/perf/include/bpf/stdio.h                     |   16 -
 tools/perf/include/bpf/unistd.h                    |   10 -
 tools/perf/perf.c                                  |   24 +-
 tools/perf/pmu-events/Build                        |    2 +-
 .../{neoverse-n2 => neoverse-n2-v2}/branch.json    |    0
 .../arm/{neoverse-n2 => neoverse-n2-v2}/bus.json   |    0
 .../arm/{neoverse-n2 => neoverse-n2-v2}/cache.json |    0
 .../{neoverse-n2 => neoverse-n2-v2}/exception.json |    0
 .../instruction.json                               |    0
 .../{neoverse-n2 => neoverse-n2-v2}/memory.json    |    0
 .../{neoverse-n2 => neoverse-n2-v2}/pipeline.json  |    0
 .../arm/{neoverse-n2 => neoverse-n2-v2}/spe.json   |    0
 .../arm/{neoverse-n2 => neoverse-n2-v2}/trace.json |    0
 tools/perf/pmu-events/arch/arm64/mapfile.csv       |    3 +-
 tools/perf/pmu-events/arch/riscv/mapfile.csv       |   17 +
 .../pmu-events/arch/riscv/riscv-sbi-firmware.json  |  134 +
 .../pmu-events/arch/riscv/sifive/u74/firmware.json |   68 +
 .../arch/riscv/sifive/u74/instructions.json        |   92 +
 .../pmu-events/arch/riscv/sifive/u74/memory.json   |   32 +
 .../arch/riscv/sifive/u74/microarch.json           |   57 +
 .../pmu-events/arch/x86/alderlake/adl-metrics.json |   73 +-
 .../perf/pmu-events/arch/x86/alderlake/cache.json  | 1391 ++--
 .../arch/x86/alderlake/floating-point.json         |   91 +-
 .../pmu-events/arch/x86/alderlake/frontend.json    |  224 +-
 .../perf/pmu-events/arch/x86/alderlake/memory.json |  214 +-
 .../perf/pmu-events/arch/x86/alderlake/other.json  |  132 +-
 .../pmu-events/arch/x86/alderlake/pipeline.json    | 1932 ++---
 .../arch/x86/alderlake/uncore-memory.json          |  185 +-
 .../arch/x86/alderlake/uncore-other.json           |   73 +-
 .../arch/x86/alderlake/virtual-memory.json         |  223 +-
 .../arch/x86/alderlaken/adln-metrics.json          |  583 ++
 .../perf/pmu-events/arch/x86/alderlaken/cache.json |  330 +
 .../arch/x86/alderlaken/floating-point.json        |   18 +
 .../pmu-events/arch/x86/alderlaken/frontend.json   |   26 +
 .../pmu-events/arch/x86/alderlaken/memory.json     |   81 +
 .../perf/pmu-events/arch/x86/alderlaken/other.json |   38 +
 .../pmu-events/arch/x86/alderlaken/pipeline.json   |  533 ++
 .../arch/x86/alderlaken/uncore-memory.json         |  175 +
 .../arch/x86/alderlaken/uncore-other.json          |   33 +
 .../arch/x86/alderlaken/virtual-memory.json        |   47 +
 tools/perf/pmu-events/arch/x86/mapfile.csv         |    3 +-
 tools/perf/pmu-events/jevents.py                   |   12 +-
 tools/perf/pmu-events/metric.py                    |  502 ++
 tools/perf/pmu-events/metric_test.py               |  157 +
 tools/perf/scripts/python/Perf-Trace-Util/Build    |    2 +-
 tools/perf/scripts/python/bin/task-analyzer-record |    2 +
 tools/perf/scripts/python/bin/task-analyzer-report |    3 +
 tools/perf/scripts/python/intel-pt-events.py       |   65 +-
 tools/perf/scripts/python/task-analyzer.py         |  934 +++
 tools/perf/tests/Build                             |   15 +-
 tools/perf/tests/attr.py                           |   71 +-
 tools/perf/tests/attr/README                       |    2 -
 tools/perf/tests/attr/test-record-group            |   22 -
 .../attr/test-record-user-regs-no-sve-aarch64      |    9 +
 .../attr/test-record-user-regs-old-sve-aarch64     |   10 +
 .../tests/attr/test-record-user-regs-sve-aarch64   |   14 +
 tools/perf/tests/attr/test-stat-group              |   17 -
 tools/perf/tests/builtin-test.c                    |   36 +
 tools/perf/tests/code-reading.c                    |    4 +-
 tools/perf/tests/cpumap.c                          |    2 +-
 tools/perf/tests/dlfilter-test.c                   |    1 +
 tools/perf/tests/event_groups.c                    |  139 +
 tools/perf/tests/expr.c                            |    1 +
 tools/perf/tests/make                              |    2 +-
 tools/perf/tests/mmap-basic.c                      |    2 +
 tools/perf/tests/openat-syscall-tp-fields.c        |    1 +
 tools/perf/tests/openat-syscall.c                  |    1 +
 tools/perf/tests/parse-events.c                    |   36 +-
 tools/perf/tests/parse-metric.c                    |    2 +-
 tools/perf/tests/parse-no-sample-id-all.c          |    1 +
 tools/perf/tests/perf-record.c                     |    2 +
 tools/perf/tests/perf-time-to-tsc.c                |    1 +
 tools/perf/tests/pmu-events.c                      |    3 +-
 tools/perf/tests/sample-parsing.c                  |    4 +-
 tools/perf/tests/shell/lib/probe_vfs_getname.sh    |    4 +-
 tools/perf/tests/shell/lock_contention.sh          |   63 +-
 tools/perf/tests/shell/pipe_test.sh                |   55 +-
 .../tests/shell/record+probe_libc_inet_pton.sh     |    2 +-
 .../tests/shell/record+script_probe_vfs_getname.sh |    2 +-
 tools/perf/tests/shell/record.sh                   |  129 +-
 tools/perf/tests/shell/record_offcpu.sh            |    2 +-
 tools/perf/tests/shell/stat.sh                     |   10 +-
 tools/perf/tests/shell/test_arm_callgraph_fp.sh    |   34 +-
 tools/perf/tests/shell/test_arm_coresight.sh       |    8 +-
 tools/perf/tests/shell/test_arm_spe.sh             |    6 +-
 tools/perf/tests/shell/test_arm_spe_fork.sh        |   46 +-
 tools/perf/tests/shell/test_brstack.sh             |   68 +-
 tools/perf/tests/shell/test_data_symbol.sh         |   33 +-
 tools/perf/tests/shell/test_java_symbol.sh         |    2 +-
 tools/perf/tests/shell/test_task_analyzer.sh       |  151 +
 tools/perf/tests/shell/trace+probe_vfs_getname.sh  |    4 +-
 tools/perf/tests/sw-clock.c                        |    1 +
 tools/perf/tests/switch-tracking.c                 |    1 +
 tools/perf/tests/tests.h                           |   28 +
 tools/perf/tests/thread-map.c                      |    1 +
 tools/perf/tests/workloads/Build                   |   13 +
 tools/perf/tests/workloads/brstack.c               |   40 +
 tools/perf/tests/workloads/datasym.c               |   24 +
 tools/perf/tests/workloads/leafloop.c              |   34 +
 tools/perf/tests/workloads/noploop.c               |   32 +
 tools/perf/tests/workloads/sqrtloop.c              |   45 +
 tools/perf/tests/workloads/thloop.c                |   53 +
 tools/perf/tests/wp.c                              |   12 +-
 tools/perf/trace/beauty/Build                      |    1 +
 tools/perf/trace/beauty/beauty.h                   |    3 +
 tools/perf/trace/beauty/fadvise.sh                 |    2 +-
 tools/perf/trace/beauty/fsmount.sh                 |    2 +-
 tools/perf/trace/beauty/fspick.sh                  |    2 +-
 tools/perf/trace/beauty/kcmp_type.sh               |    2 +-
 tools/perf/trace/beauty/kvm_ioctl.sh               |    4 +-
 tools/perf/trace/beauty/madvise_behavior.sh        |    2 +-
 tools/perf/trace/beauty/mmap_flags.sh              |   22 +-
 tools/perf/trace/beauty/mmap_prot.sh               |   12 +-
 tools/perf/trace/beauty/mount_flags.sh             |    4 +-
 tools/perf/trace/beauty/move_mount_flags.sh        |    2 +-
 tools/perf/trace/beauty/mremap_flags.sh            |    4 +-
 tools/perf/trace/beauty/perf_event_open.c          |   44 +
 tools/perf/trace/beauty/perf_ioctl.sh              |    2 +-
 .../perf/trace/beauty/pkey_alloc_access_rights.sh  |    2 +-
 tools/perf/trace/beauty/prctl_option.sh            |    4 +-
 tools/perf/trace/beauty/rename_flags.sh            |    4 +-
 tools/perf/trace/beauty/sockaddr.sh                |    4 +-
 tools/perf/trace/beauty/socket.sh                  |    4 +-
 tools/perf/trace/beauty/sync_file_range.sh         |    2 +-
 tools/perf/trace/beauty/timespec.c                 |   21 +
 .../trace/beauty/tracepoints/x86_irq_vectors.sh    |    4 +-
 tools/perf/trace/beauty/tracepoints/x86_msr.sh     |   12 +-
 tools/perf/trace/beauty/usbdevfs_ioctl.sh          |    4 +-
 tools/perf/trace/beauty/vhost_virtio_ioctl.sh      |    4 +-
 tools/perf/trace/beauty/x86_arch_prctl.sh          |    4 +-
 tools/perf/ui/util.c                               |    5 +
 tools/perf/util/Build                              |   30 +-
 tools/perf/util/amd-sample-raw.c                   |    1 +
 .../perf/util/arm64-frame-pointer-unwind-support.h |    6 +-
 tools/perf/util/auxtrace.c                         |    1 +
 tools/perf/util/auxtrace.h                         |    2 +-
 tools/perf/util/bpf-loader.c                       |    4 -
 tools/perf/util/bpf-prologue.h                     |    6 +-
 tools/perf/util/bpf_counter.c                      |    2 +-
 tools/perf/util/bpf_kwork.c                        |    3 +
 tools/perf/util/bpf_lock_contention.c              |  114 +-
 tools/perf/util/bpf_map.h                          |    3 +-
 tools/perf/util/bpf_off_cpu.c                      |    2 +-
 tools/perf/util/bpf_skel/lock_contention.bpf.c     |  101 +-
 tools/perf/util/bpf_skel/lock_data.h               |   30 +
 tools/perf/util/branch.h                           |    9 +-
 tools/perf/util/config.c                           |    4 +-
 tools/perf/util/counts.c                           |    1 -
 tools/perf/util/counts.h                           |    1 -
 tools/perf/util/cpumap.c                           |   17 +-
 tools/perf/util/cpumap.h                           |   10 +-
 tools/perf/util/cs-etm-base.c                      |  174 +
 tools/perf/util/cs-etm.c                           |  208 +-
 tools/perf/util/cs-etm.h                           |   46 +-
 tools/perf/util/data-convert-bt.c                  |    8 +-
 tools/perf/util/data-convert-json.c                |   27 +
 tools/perf/util/dwarf-aux.c                        |   77 +-
 tools/perf/util/dwarf-aux.h                        |    3 +
 tools/perf/util/event.h                            |  124 +-
 tools/perf/util/evlist.c                           |   10 +-
 tools/perf/util/evlist.h                           |    6 +-
 tools/perf/util/evsel.c                            |   54 +-
 tools/perf/util/evsel.h                            |   16 +-
 tools/perf/util/evsel_fprintf.c                    |    7 +-
 tools/perf/util/expr.c                             |    1 +
 tools/perf/util/expr.h                             |    7 +-
 tools/perf/util/header.c                           |   19 +
 tools/perf/util/header.h                           |    2 +
 .../util/intel-pt-decoder/intel-pt-insn-decoder.c  |    1 +
 tools/perf/util/intel-pt.c                         |    7 +-
 tools/perf/util/iostat.c                           |    3 +-
 tools/perf/util/iostat.h                           |    4 +-
 tools/perf/util/kwork.h                            |   12 +-
 tools/perf/util/llvm-utils.c                       |    8 +-
 tools/perf/util/lock-contention.h                  |    5 +-
 tools/perf/util/machine.c                          |   40 +
 tools/perf/util/machine.h                          |    8 +
 tools/perf/util/metricgroup.c                      |  243 +-
 tools/perf/util/metricgroup.h                      |    4 +-
 tools/perf/util/mmap.h                             |    5 -
 tools/perf/util/parse-branch-options.c             |    3 +
 tools/perf/util/parse-events.c                     |   16 +
 tools/perf/util/parse-events.h                     |    1 -
 tools/perf/util/perf_regs.c                        |    2 +-
 tools/perf/util/pfm.c                              |  154 +-
 tools/perf/util/pfm.h                              |    7 +-
 tools/perf/util/pmu.c                              |  294 +-
 tools/perf/util/pmu.h                              |  128 +-
 tools/perf/util/pmus.c                             |    5 +
 tools/perf/util/pmus.h                             |    9 +
 tools/perf/util/print-events.c                     |  639 +-
 tools/perf/util/print-events.h                     |   42 +-
 tools/perf/util/probe-finder.c                     |   37 +-
 tools/perf/util/python.c                           |   26 +-
 tools/perf/util/record.c                           |    7 -
 tools/perf/util/record.h                           |    1 -
 tools/perf/util/s390-cpumsf.c                      |    1 +
 tools/perf/util/s390-sample-raw.c                  |    1 +
 tools/perf/util/sample.h                           |  117 +
 tools/perf/util/scripting-engines/Build            |    6 +-
 .../perf/util/scripting-engines/trace-event-perl.c |    3 +
 .../util/scripting-engines/trace-event-python.c    |   12 +-
 tools/perf/util/session.c                          |    5 +-
 tools/perf/util/session.h                          |    2 +
 tools/perf/util/setup.py                           |   15 +-
 tools/perf/util/sort.c                             |   63 +-
 tools/perf/util/stat-display.c                     | 1514 ++--
 tools/perf/util/stat-shadow.c                      |    1 +
 tools/perf/util/stat.c                             |  406 +-
 tools/perf/util/stat.h                             |   41 +-
 tools/perf/util/symbol-elf.c                       |    2 +-
 tools/perf/util/symbol.h                           |    2 +
 tools/perf/util/synthetic-events.c                 |    9 +-
 tools/perf/util/thread.h                           |    3 +
 tools/perf/util/thread_map.c                       |    1 +
 tools/perf/util/thread_map.h                       |    2 -
 tools/perf/util/trace-event-info.c                 |   14 +-
 tools/perf/util/trace-event-parse.c                |    2 +
 tools/perf/util/trace-event-read.c                 |    4 +-
 tools/perf/util/trace-event-scripting.c            |    3 +-
 tools/perf/util/trace-event.c                      |    1 -
 tools/perf/util/trace-event.h                      |   13 +-
 tools/perf/util/util.h                             |   25 +-
 374 files changed, 11404 insertions(+), 26462 deletions(-)
 create mode 100644 tools/lib/symbol/Build
 create mode 100644 tools/lib/symbol/Makefile
 delete mode 100644 tools/lib/traceevent/.gitignore
 delete mode 100644 tools/lib/traceevent/Build
 delete mode 100644 tools/lib/traceevent/Documentation/Makefile
 delete mode 100644 tools/lib/traceevent/Documentation/asciidoc.conf
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-commands.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-cpus.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-endian_read.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_find.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_get.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_list.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_print.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_find.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_get_val.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_print.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_read.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-fields.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-file_endian.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-filter.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-func_apis.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-func_find.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-handle.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-header_page.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-host_endian.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-long_size.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-page_size.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-parse_event.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-parse_head.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-plugins.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-record_parse.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-reg_event_handler.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-reg_print_func.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-set_flag.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-strerror.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent-tseq.txt
 delete mode 100644 tools/lib/traceevent/Documentation/libtraceevent.txt
 delete mode 100644 tools/lib/traceevent/Documentation/manpage-1.72.xsl
 delete mode 100644 tools/lib/traceevent/Documentation/manpage-base.xsl
 delete mode 100644 tools/lib/traceevent/Documentation/manpage-bold-literal.xsl
 delete mode 100644 tools/lib/traceevent/Documentation/manpage-normal.xsl
 delete mode 100644 tools/lib/traceevent/Documentation/manpage-suppress-sp.xsl
 delete mode 100644 tools/lib/traceevent/Makefile
 delete mode 100644 tools/lib/traceevent/event-parse-api.c
 delete mode 100644 tools/lib/traceevent/event-parse-local.h
 delete mode 100644 tools/lib/traceevent/event-parse.c
 delete mode 100644 tools/lib/traceevent/event-parse.h
 delete mode 100644 tools/lib/traceevent/event-plugin.c
 delete mode 100644 tools/lib/traceevent/event-utils.h
 delete mode 100644 tools/lib/traceevent/kbuffer-parse.c
 delete mode 100644 tools/lib/traceevent/kbuffer.h
 delete mode 100644 tools/lib/traceevent/libtraceevent.pc.template
 delete mode 100644 tools/lib/traceevent/parse-filter.c
 delete mode 100644 tools/lib/traceevent/parse-utils.c
 delete mode 100644 tools/lib/traceevent/plugins/Build
 delete mode 100644 tools/lib/traceevent/plugins/Makefile
 delete mode 100644 tools/lib/traceevent/plugins/plugin_cfg80211.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_function.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_futex.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_hrtimer.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_jbd2.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_kmem.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_kvm.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_mac80211.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_sched_switch.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_scsi.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_tlb.c
 delete mode 100644 tools/lib/traceevent/plugins/plugin_xen.c
 delete mode 100644 tools/lib/traceevent/tep_strerror.c
 delete mode 100644 tools/lib/traceevent/trace-seq.c
 delete mode 100644 tools/lib/traceevent/trace-seq.h
 create mode 100644 tools/perf/arch/riscv/util/header.c
 rename tools/perf/arch/x86/tests/{intel-pt-pkt-decoder-test.c => intel-pt-test.c} (80%)
 delete mode 100644 tools/perf/examples/bpf/augmented_syscalls.c
 delete mode 100644 tools/perf/examples/bpf/etcsnoop.c
 delete mode 100644 tools/perf/include/bpf/bpf.h
 delete mode 100644 tools/perf/include/bpf/linux/socket.h
 delete mode 100644 tools/perf/include/bpf/pid_filter.h
 delete mode 100644 tools/perf/include/bpf/stdio.h
 delete mode 100644 tools/perf/include/bpf/unistd.h
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/branch.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/bus.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/cache.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/exception.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/instruction.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/memory.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/pipeline.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/spe.json (100%)
 rename tools/perf/pmu-events/arch/arm64/arm/{neoverse-n2 => neoverse-n2-v2}/trace.json (100%)
 create mode 100644 tools/perf/pmu-events/arch/riscv/mapfile.csv
 create mode 100644 tools/perf/pmu-events/arch/riscv/riscv-sbi-firmware.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/sifive/u74/firmware.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/sifive/u74/instructions.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/sifive/u74/memory.json
 create mode 100644 tools/perf/pmu-events/arch/riscv/sifive/u74/microarch.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/adln-metrics.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/cache.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/floating-point.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/frontend.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/memory.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/other.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/pipeline.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/uncore-memory.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/uncore-other.json
 create mode 100644 tools/perf/pmu-events/arch/x86/alderlaken/virtual-memory.json
 create mode 100644 tools/perf/pmu-events/metric.py
 create mode 100644 tools/perf/pmu-events/metric_test.py
 create mode 100755 tools/perf/scripts/python/bin/task-analyzer-record
 create mode 100755 tools/perf/scripts/python/bin/task-analyzer-report
 create mode 100755 tools/perf/scripts/python/task-analyzer.py
 delete mode 100644 tools/perf/tests/attr/test-record-group
 create mode 100644 tools/perf/tests/attr/test-record-user-regs-no-sve-aarch64
 create mode 100644 tools/perf/tests/attr/test-record-user-regs-old-sve-aarch64
 create mode 100644 tools/perf/tests/attr/test-record-user-regs-sve-aarch64
 delete mode 100644 tools/perf/tests/attr/test-stat-group
 create mode 100644 tools/perf/tests/event_groups.c
 create mode 100755 tools/perf/tests/shell/test_task_analyzer.sh
 create mode 100644 tools/perf/tests/workloads/Build
 create mode 100644 tools/perf/tests/workloads/brstack.c
 create mode 100644 tools/perf/tests/workloads/datasym.c
 create mode 100644 tools/perf/tests/workloads/leafloop.c
 create mode 100644 tools/perf/tests/workloads/noploop.c
 create mode 100644 tools/perf/tests/workloads/sqrtloop.c
 create mode 100644 tools/perf/tests/workloads/thloop.c
 create mode 100644 tools/perf/trace/beauty/timespec.c
 create mode 100644 tools/perf/util/bpf_skel/lock_data.h
 create mode 100644 tools/perf/util/cs-etm-base.c
 create mode 100644 tools/perf/util/pmus.c
 create mode 100644 tools/perf/util/pmus.h
 create mode 100644 tools/perf/util/sample.h
  

Comments

Linus Torvalds Dec. 16, 2022, 7:41 p.m. UTC | #1
On Fri, Dec 16, 2022 at 8:36 AM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
>         This time there is a trivial resolution of a merge conflict
> related to commit c302378bc157f6a7 ("libbpf: Hashmap interface update to
> allow both long and void* keys/values"), that touched tools/perf/ files.

Normally I'd ask you very sternly to please not resolve merge
conflicts for me, but since I just screwed up another merge due to
being on the road and not having done a full build test, I guess I
will just be quiet this time.

So the real reason for this email is that I get an error like this on
my laptop when trying to build the perf tools:

    INSTALL libbpf_headers
  Traceback (most recent call last):
    File "util/setup.py", line 31, in <module>
      from setuptools import setup, Extension
  ImportError: No module named setuptools
  cp: cannot stat 'python_ext_build/lib/perf*.so': No such file or directory
  make[2]: *** [Makefile.perf:651: python/perf] Error 1
  make[2]: *** Waiting for unfinished jobs....
  make[1]: *** [Makefile.perf:236: sub-make] Error 2
  make: *** [Makefile:70: all] Error 2

and it's not new to this pull - I've seen it before and it's something
stupid I've done.

I think it's a missing package dependency that this laptop then hits.
But considering my previous merge failure, I'm not super-happy about
traveling with a laptop that then can't do this build test.

It would be lovely to have that package dependency - whatever it may
be - tested for explicitly. Hint hint.

           Linus
  
pr-tracker-bot@kernel.org Dec. 16, 2022, 7:44 p.m. UTC | #2
The pull request you sent on Fri, 16 Dec 2022 11:36:09 -0300:

> git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git tags/perf-tools-for-v6.2-1-2022-12-16

has been merged into torvalds/linux.git:
https://git.kernel.org/torvalds/c/aa4800e31c547ed00681318335ca2298c4bca33a

Thank you!
  
Arnaldo Carvalho de Melo Dec. 17, 2022, 2:50 p.m. UTC | #3
Em Fri, Dec 16, 2022 at 01:41:24PM -0600, Linus Torvalds escreveu:
> On Fri, Dec 16, 2022 at 8:36 AM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

> >         This time there is a trivial resolution of a merge conflict
> > related to commit c302378bc157f6a7 ("libbpf: Hashmap interface update to
> > allow both long and void* keys/values"), that touched tools/perf/ files.
 
> Normally I'd ask you very sternly to please not resolve merge
> conflicts for me, but since I just screwed up another merge due to

I thought I was helping you... Now I know better :-/

> being on the road and not having done a full build test, I guess I
> will just be quiet this time.
 
> So the real reason for this email is that I get an error like this on
> my laptop when trying to build the perf tools:
 
>     INSTALL libbpf_headers
>   Traceback (most recent call last):
>     File "util/setup.py", line 31, in <module>
>       from setuptools import setup, Extension
>   ImportError: No module named setuptools
>   cp: cannot stat 'python_ext_build/lib/perf*.so': No such file or directory
>   make[2]: *** [Makefile.perf:651: python/perf] Error 1
>   make[2]: *** Waiting for unfinished jobs....
>   make[1]: *** [Makefile.perf:236: sub-make] Error 2
>   make: *** [Makefile:70: all] Error 2
 
> and it's not new to this pull - I've seen it before and it's something
> stupid I've done.
 
> I think it's a missing package dependency that this laptop then hits.
> But considering my previous merge failure, I'm not super-happy about
> traveling with a laptop that then can't do this build test.

My bad, I should have acted upon that immediately, oh well, fell thru
the cracks but now I have a fix in my perf/core and perf/urgent
branches.

  git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux.git perf/urgent

It will be in my next pull req if you prefer not to apply it unsigned or
manually from the copy below.
 
> It would be lovely to have that package dependency - whatever it may
> be - tested for explicitly. Hint hint.

And below you have it, now back to the pool, the kids are waiting :-)

Regards,

- Arnaldo

From 71c2c68e4fadc9019d727bdcf54490c438d59cdb Mon Sep 17 00:00:00 2001
From: Arnaldo Carvalho de Melo <acme@redhat.com>
Date: Sat, 17 Dec 2022 11:37:15 -0300
Subject: [PATCH 1/1] perf python: Don't stop building if python setuptools
 isn't installed

The python3-setuptools package is needed to build the python binding, so
that one can use things like:

  # ~acme/git/perf/tools/perf/python/twatch.py
  cpu: 6, pid: 4573, tid: 2184618 { type: exit, pid: 4573, ppid: 4172, tid: 2184618, ptid: 4172, time: 12563190090107}
  cpu: 24, pid: 4573, tid: 4573 { type: fork, pid: 4573, ppid: 4573, tid: 2190991, ptid: 4573, time: 12563415289331}
  cpu: 29, pid: 4573, tid: 2190991 { type: comm, pid: 4573, tid: 2190991, comm: StreamT~ns #401 }
  cpu: 29, pid: 4573, tid: 2190991 { type: comm, pid: 4573, tid: 2190991, comm: StreamT~ns #401 }
  ^CTraceback (most recent call last):
    File "/var/home/acme/git/perf/tools/perf/python/twatch.py", line 61, in <module>
      main()
    File "/var/home/acme/git/perf/tools/perf/python/twatch.py", line 33, in main
      evlist.poll(timeout = -1)
  KeyboardInterrupt

  #

That have 'import perf;'.

But distros don't always have that python3-setuptools (or equivalent)
installed, which was breaking the build. Just check if it is installed
and emit a warning that such binding isn't being built and continue the
build without it:

With it:

  $ rpm -q python3-setuptools
  python3-setuptools-59.6.0-3.fc36.noarch
  $ rm -rf /tmp/build/perf; mkdir -p /tmp/build/perf
  $ make O=/tmp/build/perf -C tools/perf install-bin
  make: Entering directory '/var/home/acme/git/perf/tools/perf'
  <SNIP>
  ...                               libpython: [ on  ]
  <SNIP>
    GEN     /tmp/build/perf/python/perf.cpython-310-x86_64-linux-gnu.so
  <SNIP>
  $ ls -la /tmp/build/perf/python/perf.cpython-310-x86_64-linux-gnu.so
  -rwxr-xr-x. 1 acme acme 1609112 Dec 17 11:39 /tmp/build/perf/python/perf.cpython-310-x86_64-linux-gnu.so
  $

Without it:

  $ sudo rpm -e python3-setuptools
  $ rm -rf /tmp/build/perf ; mkdir -p /tmp/build/perf
  $ make O=/tmp/build/perf -C tools/perf install-bin
  make: Entering directory '/var/home/acme/git/perf/tools/perf'
  <SNIP>
  ...                               libpython: [ on  ]
  <SNIP>
  $ ls -la /tmp/build/perf/python/perf.cpython-310-x86_64-linux-gnu.so
  ls: cannot access '/tmp/build/perf/python/perf.cpython-310-x86_64-linux-gnu.so': No such file or directory
  $

Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
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>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/Makefile.config | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
index 83ed969b95b4a53f..c21bd6010be1384c 100644
--- a/tools/perf/Makefile.config
+++ b/tools/perf/Makefile.config
@@ -890,8 +890,13 @@ else
       else
          LDFLAGS += $(PYTHON_EMBED_LDFLAGS)
          EXTLIBS += $(PYTHON_EMBED_LIBADD)
-         PYTHON_EXTENSION_SUFFIX := $(shell $(PYTHON) -c 'from importlib import machinery; print(machinery.EXTENSION_SUFFIXES[0])')
-         LANG_BINDINGS += $(obj-perf)python/perf$(PYTHON_EXTENSION_SUFFIX)
+         PYTHON_SETUPTOOLS_INSTALLED := $(shell $(PYTHON) -c 'import setuptools;' 2> /dev/null && echo "yes" || echo "no")
+         ifeq ($(PYTHON_SETUPTOOLS_INSTALLED), yes)
+           PYTHON_EXTENSION_SUFFIX := $(shell $(PYTHON) -c 'from importlib import machinery; print(machinery.EXTENSION_SUFFIXES[0])')
+           LANG_BINDINGS += $(obj-perf)python/perf$(PYTHON_EXTENSION_SUFFIX)
+	 else
+           msg := $(warning Missing python setuptools, the python binding won't be built, please install python3-setuptools or equivalent);
+         endif
          CFLAGS += -DHAVE_LIBPYTHON_SUPPORT
          $(call detected,CONFIG_LIBPYTHON)
       endif
  
Steven Rostedt Dec. 17, 2022, 4:05 p.m. UTC | #4
On December 17, 2022 9:50:07 AM EST, Arnaldo Carvalho de Melo <acme@kernel.org> wrote:

>
>And below you have it, now back to the pool, the kids are waiting :-)
>

Sure, rub it in to those of us in North America dealing with a snow storm!

-- Steve
  
Linus Torvalds Dec. 17, 2022, 7:55 p.m. UTC | #5
On Sat, Dec 17, 2022 at 8:50 AM Arnaldo Carvalho de Melo
<acme@kernel.org> wrote:
>
> The python3-setuptools package is needed to build the python binding, so
> that one can use things like:

So this fixes the error, but there's some other reason for it.

I have

  Package python3-setuptools-59.6.0-3.fc36.noarch is already installed.

and with that patch the 'perf' build now works for me, but it says:

    Makefile.config:898: Missing python setuptools, the python binding
won't be built, please install python3-setuptools or equivalent

and then (pre-existing)

    Makefile.config:921: Python interpreter too old (older than 3.6)
disabling jevent generation

but I have

    python3-3.10.8-3.fc36.x86_64

Now, for some reason I *also* have python2 installed, but that one is
called "python2".

[ Me trying to figure things out ]

Ok, so if I uninstall my old python2 install, I now get

  Makefile.config:880: No python interpreter was found: disables
Python support - please install python-devel/python-dev
  Makefile.config:915: No python interpreter disabling jevent generation

ok, so I didn't have 'python3-devel' installed. Installing that fixes
some things, but then I get

  Makefile.config:889: No 'Python.h' (for Python 2.x support) was
found: disables Python support - please install
python-devel/python-dev

so apparently perf really wants *both* python2 and python3 installed.
Isn't that a bit excessive?

Anyway, it's clearly something about the install on this laptop, but
the error messages and the "this package is missing" things are
clearly not entirely right.

Whatever. It does build cleanly now for me, and I'll ignore that "No
'Python.h' (for Python 2.x support)" thing.

              Linus
  
Arnaldo Carvalho de Melo Dec. 17, 2022, 8:37 p.m. UTC | #6
On December 17, 2022 4:55:25 PM GMT-03:00, Linus Torvalds <torvalds@linux-foundation.org> wrote:
>On Sat, Dec 17, 2022 at 8:50 AM Arnaldo Carvalho de Melo
><acme@kernel.org> wrote:
>>
>> The python3-setuptools package is needed to build the python binding, so
>> that one can use things like:
>
>So this fixes the error, but there's some other reason for it.
>
>I have
>
>  Package python3-setuptools-59.6.0-3.fc36.noarch is already installed.
>
>and with that patch the 'perf' build now works for me, but it says:
>
>    Makefile.config:898: Missing python setuptools, the python binding
>won't be built, please install python3-setuptools or equivalent
>
>and then (pre-existing)
>
>    Makefile.config:921: Python interpreter too old (older than 3.6)
>disabling jevent generation
>
>but I have
>
>    python3-3.10.8-3.fc36.x86_64
>
>Now, for some reason I *also* have python2 installed, but that one is
>called "python2".
>
>[ Me trying to figure things out ]
>
>Ok, so if I uninstall my old python2 install, I now get
>
>  Makefile.config:880: No python interpreter was found: disables
>Python support - please install python-devel/python-dev
>  Makefile.config:915: No python interpreter disabling jevent generation
>
>ok, so I didn't have 'python3-devel' installed. Installing that fixes
>some things, but then I get
>
>  Makefile.config:889: No 'Python.h' (for Python 2.x support) was
>found: disables Python support - please install
>python-devel/python-dev
>
>so apparently perf really wants *both* python2 and python3 installed.
>Isn't that a bit excessive?

Well, perf used python2, then python3 became and option, had to be explicitly selected, then the default moved to python3.

Now probably the sensible thing is to get rid of all things related to python2, I'll spend some time on this...

>Anyway, it's clearly something about the install on this laptop, but
>the error messages and the "this package is missing" things are
>clearly not entirely right.
>
>Whatever. It does build cleanly now for me, and I'll ignore that "No
>'Python.h' (for Python 2.x support)" thing.

Ok, thanks for testing it.

- Arnaldo
  
Arnaldo Carvalho de Melo Dec. 20, 2022, 1:08 p.m. UTC | #7
tldr;: if you do:

$ make -C tools clean
$ sudo dnf remove python2 python2-devel
$ sudo dnf install python-devel

It should build cleanly, below I looked at the various places these
feature detections are made and found places for improving messages,
etc.

Ian, that "jevent generation" gets confused when python2 _and_ python3
is installed, please take a look at that.

- Arnaldo

Em Sat, Dec 17, 2022 at 01:55:25PM -0600, Linus Torvalds escreveu:
> On Sat, Dec 17, 2022 at 8:50 AM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> > The python3-setuptools package is needed to build the python binding, so
> > that one can use things like:
> 
> So this fixes the error, but there's some other reason for it.
> 
> I have
> 
>   Package python3-setuptools-59.6.0-3.fc36.noarch is already installed.
> 
> and with that patch the 'perf' build now works for me, but it says:
> 
>     Makefile.config:898: Missing python setuptools, the python binding
> won't be built, please install python3-setuptools or equivalent
> 
> and then (pre-existing)
> 
>     Makefile.config:921: Python interpreter too old (older than 3.6)
> disabling jevent generation
> 
> but I have
> 
>     python3-3.10.8-3.fc36.x86_64
> 
> Now, for some reason I *also* have python2 installed, but that one is
> called "python2".

> [ Me trying to figure things out ]
> 
> Ok, so if I uninstall my old python2 install, I now get
> 
>   Makefile.config:880: No python interpreter was found: disables
> Python support - please install python-devel/python-dev

>   Makefile.config:915: No python interpreter disabling jevent generation
> 
> ok, so I didn't have 'python3-devel' installed. Installing that fixes
> some things, but then I get
> 
>   Makefile.config:889: No 'Python.h' (for Python 2.x support) was
> found: disables Python support - please install
> python-devel/python-dev

Humm, I couldn't reproduce this one, as I have:

⬢[acme@toolbox perf]$ grep libpython /tmp/build/perf/FEATURE-DUMP
feature-libpython=1
⬢[acme@toolbox perf]$

And that message only happens when that feature-libpython != 1

That is set by this feature query snippet:

⬢[acme@toolbox perf]$ cat tools/build/feature/test-libpython.c
// SPDX-License-Identifier: GPL-2.0
#include <Python.h>

int main(void)
{
	Py_Initialize();

	return 0;
}
#undef _GNU_SOURCE
⬢[acme@toolbox perf]$

One can see the output of building it at (if you build it without O=,
please look at tools/build/feature/test-libpython.make.output instead):
):

⬢[acme@toolbox perf]$ cat /tmp/build/perf/feature/test-libpython.make.output
⬢[acme@toolbox perf]$

In my case, it is working, so empty make.output file and the test binary
works and links with python3 (tools/build/feature/test-libpython.bin
when building without O=):

⬢[acme@toolbox perf]$ file /tmp/build/perf/feature/test-libpython.bin
/tmp/build/perf/feature/test-libpython.bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=601e3a065cc8e045e7a46199234c0bbf80707981, for GNU/Linux 3.2.0, not stripped
⬢[acme@toolbox perf]$ ldd /tmp/build/perf/feature/test-libpython.bin
	linux-vdso.so.1 (0x00007ffc371fe000)
	libpython3.10.so.1.0 => /lib64/libpython3.10.so.1.0 (0x00007fddb0200000)
	libcrypt.so.2 => /lib64/libcrypt.so.2 (0x00007fddb05f9000)
	libm.so.6 => /lib64/libm.so.6 (0x00007fddb0122000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fddafe00000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fddb063f000)
⬢[acme@toolbox perf]$

The needed file is available and is part of the python3-devel file:

⬢[acme@toolbox perf]$ ls -la /usr/include/python3.10/Python.h
-rw-r--r--. 1 root root 3224 Oct 11 08:21 /usr/include/python3.10/Python.h
⬢[acme@toolbox perf]$ rpm -qf /usr/include/python3.10/Python.h
python3-devel-3.10.8-3.fc36.x86_64
⬢[acme@toolbox perf]$

That message needs updating, its from a long time ago:

9734163b6ee1425c6 tools/perf/config/Makefile (Ingo Molnar 2013-09-30 15:18:37 +0200  888)       ifneq ($(feature-libpython), 1)
6c5aa23704e2786eb tools/perf/config/Makefile (Ingo Molnar 2015-02-28 09:33:45 +0100  889)         $(call disable-python,No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev)
6e533cf12de06368a tools/perf/config/Makefile (Jiri Olsa   2013-03-18 00:35:32 +0100  890)       else

> so apparently perf really wants *both* python2 and python3 installed.
> Isn't that a bit excessive?

I'll update that message, its one or the other, and we will work to make
it support only python3 as python2 is deprecated.
 
> Anyway, it's clearly something about the install on this laptop, but
> the error messages and the "this package is missing" things are
> clearly not entirely right.

Right, perhaps a 'make -C tools clean' may clean some previous feature
detection that stuck somehow? I'll do continue tinkering here to see if
I get this in a better shape.
 
> Whatever. It does build cleanly now for me, and I'll ignore that "No
> 'Python.h' (for Python 2.x support)" thing.

The only time I got this message was now that I uninstalled
python3-devel:

Makefile.config:889: No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev

The next one I got because I have python2 installed:

⬢[acme@toolbox perf]$ rpm -qa | grep python2
python2.7-2.7.18-22.fc36.x86_64

Makefile.config:921: Python interpreter too old (older than 3.6) disabling jevent generation

Removing python2 I get:

Makefile.config:880: No python interpreter was found: disables Python support - please install python-devel/python-dev
Makefile.config:915: No python interpreter disabling jevent generation

So you get this message:

>   Makefile.config:889: No 'Python.h' (for Python 2.x support) was
> found: disables Python support - please install
> python-devel/python-dev

When you have python2 and python3 but no python3-devel nor
python2-devel:

⬢[acme@toolbox perf]$ rpm -q python3
python3-3.10.8-3.fc36.x86_64
⬢[acme@toolbox perf]$ rpm -qa | grep python2
python2.7-2.7.18-22.fc36.x86_64
⬢[acme@toolbox perf]$ rpm -q python2-devel
package python2-devel is not installed
⬢[acme@toolbox perf]$ rpm -q python3-devel
package python3-devel is not installed
⬢[acme@toolbox perf]$ m
make: Entering directory '/var/home/acme/git/perf/tools/perf'
  BUILD:   Doing 'make -j32' parallel build
<SNIP>
Makefile.config:889: No 'Python.h' (for Python 2.x support) was found: disables Python support - please install python-devel/python-dev
Makefile.config:921: Python interpreter too old (older than 3.6) disabling jevent generation

Auto-detecting system features:
<SNIP>
...                               libpython: [ OFF ]
⬢[acme@toolbox perf]$

If I then uninstall python2:

⬢[acme@toolbox perf]$ sudo dnf remove python2

It changes to:

Makefile.config:880: No python interpreter was found: disables Python support - please install python-devel/python-dev
Makefile.config:915: No python interpreter disabling jevent generation

Which is more sensible, then if I install python-devel:

⬢[acme@toolbox perf]$ sudo dnf install python-devel

$ sudo dnf install python-devel

I see no warnings, clean build and libpython detected:

...                               libpython: [ on  ]


⬢[acme@toolbox perf]$ ldd /tmp/build/perf/perf | grep python
	libpython3.10.so.1.0 => /lib64/libpython3.10.so.1.0 (0x00007f1eea200000)
⬢[acme@toolbox perf]$

- Arnaldo