| #!/bin/bash |
| # |
| # Testcase: Simulate missed breadcrumb interrupts |
| # |
| |
| SOURCE_DIR="$( dirname "${BASH_SOURCE[0]}" )" |
| . $SOURCE_DIR/drm_lib.sh |
| |
| oldpath=`pwd` |
| |
| cd $i915_dfs_path |
| |
| echo $SOURCE_DIR |
| |
| function check_for_missed_irq { |
| if test `cat i915_ring_missed_irq` = 0x00000000; then |
| echo "missed interrupts undetected" |
| exit 1 |
| fi |
| } |
| |
| function check_for_hang { |
| if cat i915_error_state | grep -v "no error state collected" > /dev/null ; then |
| echo "gpu hang reported" |
| exit 2 |
| fi |
| } |
| |
| if [ ! -f i915_ring_missed_irq ] ; then |
| echo "kernel doesn't support interrupt masking" |
| exit 77 |
| fi |
| |
| # clear error state first |
| echo > i915_error_state |
| check_for_hang |
| |
| echo 0xf > i915_ring_test_irq |
| echo "Interrupts masked" |
| if test `cat i915_ring_test_irq` != 0x0000000f; then |
| echo "Failed to set interrupt mask" |
| exit 3 |
| fi |
| |
| (cd $oldpath; $SOURCE_DIR/gem_exec_big) > /dev/null |
| |
| check_for_missed_irq |
| check_for_hang |
| |
| (cd $oldpath; $SOURCE_DIR/gem_exec_big) > /dev/null |
| |
| check_for_hang |
| |
| echo 0 > i915_ring_test_irq |
| echo "Interrupts unmasked" |
| if test `cat i915_ring_test_irq` != 0x00000000; then |
| echo "Failed to clear interrupt mask" |
| exit 3 |
| fi |
| |
| (cd $oldpath; $SOURCE_DIR/gem_exec_big) > /dev/null |
| |
| check_for_hang |
| |
| echo 0 > i915_ring_missed_irq |
| echo "Cleared missed interrupts" |
| if test `cat i915_ring_missed_irq` != 0x00000000; then |
| echo "Failed to clear missed interrupts" |
| exit 3 |
| fi |
| |
| exit 0 |