summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtests/ZZ_hangman62
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