Commit 45cd84bd authored by Ian Rogers's avatar Ian Rogers Committed by Namhyung Kim
Browse files

perf tests: Add a DRM PMU test



The test opens any DRM devices so that the shell has fdinfo files
containing the DRM data. The test then uses perf stat to make sure the
events can be read.

Signed-off-by: default avatarIan Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250624231837.179536-4-irogers@google.com


Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
parent 28917cb1
Loading
Loading
Loading
Loading
+78 −0
Original line number Diff line number Diff line
#!/bin/bash
# DRM PMU
# SPDX-License-Identifier: GPL-2.0

set -e

output=$(mktemp /tmp/perf.drm_pmu.XXXXXX.txt)

cleanup() {
  rm -f "${output}"

  trap - EXIT TERM INT
}

trap_cleanup() {
  echo "Unexpected signal in ${FUNCNAME[1]}"
  cleanup
  exit 1
}
trap trap_cleanup EXIT TERM INT

# Array to store file descriptors and device names
declare -A device_fds

# Open all devices and store file descriptors. Opening the device will create a
# /proc/$$/fdinfo file containing the DRM statistics.
fd_count=3 # Start with file descriptor 3
for device in /dev/dri/*
do
  if [[ ! -c "$device" ]]
  then
    continue
  fi
  major=$(stat -c "%Hr" "$device")
  if [[ "$major" != 226 ]]
  then
    continue
  fi
  echo "Opening $device"
  eval "exec $fd_count<\"$device\""
  echo "fdinfo for: $device (FD: $fd_count)"
  cat "/proc/$$/fdinfo/$fd_count"
  echo
  device_fds["$device"]="$fd_count"
  fd_count=$((fd_count + 1))
done

if [[ ${#device_fds[@]} -eq 0 ]]
then
  echo "No DRM devices found [Skip]"
  cleanup
  exit 2
fi

# For each DRM event
err=0
for p in $(perf list --raw-dump drm-)
do
  echo -n "Testing perf stat of $p. "
  perf stat -e "$p" --pid=$$ true > "$output" 2>&1
  if ! grep -q "$p" "$output"
  then
    echo "Missing DRM event in: [Failed]"
    cat "$output"
    err=1
  else
    echo "[OK]"
  fi
done

# Close all file descriptors
for fd in "${device_fds[@]}"; do
  eval "exec $fd<&-"
done

# Finished
cleanup
exit $err