1#!/bin/sh
2# perf all libpfm4 events test
3# SPDX-License-Identifier: GPL-2.0
4
5if perf version --build-options | grep HAVE_LIBPFM | grep -q OFF
6then
7  echo "Skipping, no libpfm4 support"
8  exit 2
9fi
10
11err=0
12for p in $(perf list --raw-dump pfm)
13do
14  if echo "$p" | grep -q unc_
15  then
16    echo "Skipping uncore event '$p' that may require additional options."
17    continue
18  fi
19  echo "Testing $p"
20  result=$(perf stat --pfm-events "$p" true 2>&1)
21  x=$?
22  if echo "$result" | grep -q "failed to parse event $p : invalid or missing unit mask"
23  then
24    continue
25  fi
26  if test "$x" -ne "0"
27  then
28    echo "Unexpected exit code '$x'"
29    err=1
30  fi
31  if ! echo "$result" | grep -q "$p" && ! echo "$result" | grep -q "<not supported>"
32  then
33    # We failed to see the event and it is supported. Possibly the workload was
34    # too small so retry with something longer.
35    result=$(perf stat --pfm-events "$p" perf bench internals synthesize 2>&1)
36    x=$?
37    if test "$x" -ne "0"
38    then
39      echo "Unexpected exit code '$x'"
40      err=1
41    fi
42    if ! echo "$result" | grep -q "$p"
43    then
44      echo "Event '$p' not printed in:"
45      echo "$result"
46      err=1
47    fi
48  fi
49done
50
51exit "$err"
52