diff --git a/test-case/check-suspend-resume.sh b/test-case/check-suspend-resume.sh index 7129d85a..d0c3b44a 100755 --- a/test-case/check-suspend-resume.sh +++ b/test-case/check-suspend-resume.sh @@ -19,8 +19,9 @@ set -e ## check kernel log and find no errors ## +TOPDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd) # shellcheck source=case-lib/lib.sh -source "$(dirname "${BASH_SOURCE[0]}")"/../case-lib/lib.sh +source "$TOPDIR"/case-lib/lib.sh random_min=3 # wait time should >= 3 for other device wakeup from sleep random_max=20 @@ -34,6 +35,9 @@ OPT_HAS_ARG['T']=1 OPT_VAL['T']="" OPT_NAME['S']='sleep' OPT_DESC['S']='suspend/resume command:rtcwake sleep duration' OPT_HAS_ARG['S']=1 OPT_VAL['S']=5 +OPT_NAME['u']='unload-audio' OPT_DESC['u']='unload audio modules for the test' +OPT_HAS_ARG['u']=0 OPT_VAL['u']=0 + OPT_NAME['w']='wait' OPT_DESC['w']='idle time after suspend/resume wakeup' OPT_HAS_ARG['w']=1 OPT_VAL['w']=5 @@ -124,16 +128,46 @@ dump_and_die() die "$@" } +main() +{ # This is used to workaround https://github.com/thesofproject/sof-test/issues/650, # which may be caused by kernel issue or unstable network connection. # TODO: remove this after issue fixed. -sleep 1 + sleep 1 + + local keep_modules=true already_unloaded=false + + if [ ${OPT_VAL['u']} = 1 ]; then + keep_modules=false + fi + + sudo lsmod | grep -q snd.sof || { + already_unloaded=true + $keep_modules || + dlogw 'modules already unloaded, ignoring option -u!' + } + + $already_unloaded || $keep_modules || "$TOPDIR"/tools/kmod/sof_remove.sh || + die "Failed to unload audio drivers" + + expected_wakeup_count=$(cat /sys/power/wakeup_count) + expected_stats_success=$(cat /sys/power/suspend_stats/success) + save_initial_stats + for i in $(seq 1 $loop_count) + do + sleep_once "$i" + done + + $already_unloaded || $keep_modules || "$TOPDIR"/tools/kmod/sof_insert.sh || + die "Failed to reload audio drivers" + sof-kernel-log-check.sh "$KERNEL_CHECKPOINT" || + die "Found kernel error after reloading audio drivers" +} + +sleep_once() +{ + local i="$1" -expected_wakeup_count=$(cat /sys/power/wakeup_count) -expected_stats_success=$(cat /sys/power/suspend_stats/success) -save_initial_stats -for i in $(seq 1 $loop_count) -do dlogi "===== Round($i/$loop_count) =====" # set up checkpoint for each iteration setup_kernel_check_point @@ -160,6 +194,6 @@ do [ "$stats_success" -eq "$expected_stats_success" ] || dump_and_die "/sys/power/suspend_stats/success is $stats_success, expected $expected_stats_success" check_suspend_fails || dump_and_die "some failure counts have changed" +} -done - +main "$@"