diff options
Diffstat (limited to 'tests/ZZ_hangman')
-rwxr-xr-x | tests/ZZ_hangman | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/tests/ZZ_hangman b/tests/ZZ_hangman new file mode 100755 index 00000000..7afda570 --- /dev/null +++ b/tests/ZZ_hangman @@ -0,0 +1,62 @@ +#!/bin/sh +# +# 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 +# + +if [ -d /debug/dri ] ; then + debugfs_path=/debug_dri +fi + +if [ -d /sys/kernel/debug/dri ] ; then + debugfs_path=/sys/kernel/debug/dri +fi + +cur_path=`pwd` +i915_path=x +for dir in `ls $debugfs_path` ; do + if [ -f $debugfs_path/$dir/i915_error_state ] ; then + i915_path=$debugfs_path/$dir + break + fi +done + +if [ $i915_path = "x" ] ; then + echo i915 debugfs path not found. + exit 1 +fi + +cd $i915_path + +if [ ! -f i915_ring_stop ] ; then + echo "kernel doesn't support ring stopping" + exit 77 +fi + +if cat i915_error_state | grep -v "no error state collected" > /dev/null ; then + echo "gpu hang dectected" + exit 1 +fi + +# stop rings +echo 0xf > i915_ring_stop + +# need to run it twice, otherwise there are no waiters +$cur_path/gem_exec_nop > /dev/null 2>&1 & +$cur_path/gem_exec_nop > /dev/null 2>&1 & + +sleep 10 + +if cat i915_error_state | grep -v "no error state collected" > /dev/null ; then + echo "gpu hang correctly dectected" +else + echo "gpu hang not dectected" + exit 2 +fi + +# clear error state +echo 0 > i915_ring_stop + +exit 0 |