#!/bin/bash # # Testcase: Simulate gpu hang # # This check uses the stop_rings facility to exercise the gpu hang code. # by reading /sys/kernel/debug/dri/0/i915_emon_status too quickly # SOURCE_DIR="$( dirname "${BASH_SOURCE[0]}" )" . $SOURCE_DIR/drm_lib.sh oldpath=`pwd` cd $i915_dfs_path if [ ! -f i915_ring_stop ] ; then echo "kernel doesn't support ring stopping" exit 77 fi function check_iface { dir="$1" file="$2" mandatory="$3" [ -z "$dir" ] && return path="$dir/$file" echo checking ${path} if [ ! -f "$path" ] ; then if [ $mandatory != 0 ] ; then echo "'${path}' not found"; exit 1; else echo "${path} not mandatory"; return; fi fi if cat "$path" | grep -v "no error state collected" > /dev/null ; then echo "gpu hang detected" exit 2 fi echo 0xf > i915_ring_stop echo "rings stopped" (cd $oldpath; $SOURCE_DIR/gem_exec_big) > /dev/null if cat "$path" | grep -v "no error state collected" > /dev/null ; then echo "gpu hang correctly detected" else echo "gpu hang not detected" exit 3 fi # clear error state echo > "$path" if cat "$path" | grep -v "no error state collected" > /dev/null ; then echo "gpu hang still present" exit 4 fi } check_iface "$i915_dfs_path" i915_error_state 1 check_iface "$i915_sfs_path" error 0 exit 0