linux/tools/perf/tests/shell/drm_pmu.sh
Ian Rogers 45cd84bd7a 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: Ian Rogers <irogers@google.com>
Link: https://lore.kernel.org/r/20250624231837.179536-4-irogers@google.com
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
2025-06-25 11:12:35 -07:00

78 lines
1.4 KiB
Bash
Executable file

#!/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