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