#!/bin/bash # # Testcase: Reload the drm module # # ... we've broken this way too often :( # SOURCE_DIR="$( dirname "${BASH_SOURCE[0]}" )" . $SOURCE_DIR/drm_lib.sh # no other drm service should be running, so we can just unbind function reload() { local snd_hda_intel_unloaded echo Reloading i915.ko with $* # we must kick away fbcon (but only fbcon) for vtcon in /sys/class/vtconsole/vtcon*/ ; do if grep "frame buffer device" $vtcon/name > /dev/null ; then echo unbinding $vtcon: `cat $vtcon/name` echo 0 > $vtcon/bind fi done # The sound driver uses our power well pkill alsactl snd_hda_intel_unloaded=0 rmmod snd_hda_intel &> /dev/null && snd_hda_intel_unloaded=1 #ignore errors in ips - gen5 only rmmod intel_ips &> /dev/null rmmod i915 || return $IGT_EXIT_SKIP #ignore errors in intel-gtt, often built-in rmmod intel-gtt &> /dev/null # drm may be used by other devices (nouveau, radeon, udl, etc) rmmod drm_kms_helper &> /dev/null rmmod drm &> /dev/null if lsmod | grep i915 &> /dev/null ; then echo WARNING: i915.ko still loaded! return $IGT_EXIT_FAILURE else echo module successfully unloaded fi modprobe i915 $* if [ -f /sys/class/vtconsole/vtcon1/bind ]; then echo 1 > /sys/class/vtconsole/vtcon1/bind fi modprobe -q snd_hda_intel || return $snd_hda_intel_unloaded } function finish_load() { # does the device exist? if $SOURCE_DIR/gem_alive > /dev/null ; then echo "module successfully loaded again" else echo "failed to reload module successfully" return $IGT_EXIT_FAILURE fi # then try to run something if ! $SOURCE_DIR/gem_exec_store > /dev/null ; then echo "failed to execute a simple batch after reload" return $IGT_EXIT_FAILURE fi return $IGT_EXIT_SUCCESS } reload || exit $? finish_load || exit $? # Repeat the module reload trying to to generate faults for i in $(seq 1 4); do reload inject_load_failure=$i done reload || exit $? finish_load exit $?