Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> --- arm/run | 8 ++++++-- arm/unittests.cfg | 1 + run_tests.sh | 5 ++++- scripts/functions.bash | 8 ++++++-- scripts/mkstandalone.sh | 9 +++++++-- x86/run | 8 ++++++-- x86/unittests.cfg | 1 + 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/arm/run b/arm/run index 4a648697d7fb5..a66892becc8ae 100755 --- a/arm/run +++ b/arm/run @@ -75,10 +75,14 @@ chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd' M+=",accel=$ACCEL" command="$qemu $M -cpu $processor $chr_testdev" command+=" -display none -serial stdio -kernel" -echo $command "$@" + +if [ "$TIMEOUT" ]; then + timeout_cmd="timeout --foreground $TIMEOUT" +fi +echo $timeout_cmd $command "$@" if [ "$DRYRUN" != "yes" ]; then - $command "$@" + $timeout_cmd $command "$@" ret=$? echo Return value from qemu: $ret exit $ret diff --git a/arm/unittests.cfg b/arm/unittests.cfg index 926bbb153728b..8c6c475f050fc 100644 --- a/arm/unittests.cfg +++ b/arm/unittests.cfg @@ -15,6 +15,7 @@ # accel = kvm|tcg # Optionally specify if test must run with # # kvm or tcg. If not specified, then kvm will # # be used when available. +# timeout = <duration> # Optionally specify a timeout. ############################################################################## # diff --git a/run_tests.sh b/run_tests.sh index f8de08cfb21b5..23494fa032c49 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -21,6 +21,7 @@ function run() local arch="$6" local check="$7" local accel="$8" + local timeout="${9:-$TIMEOUT}" local errlog sig ret if [ -z "$testname" ]; then @@ -48,7 +49,7 @@ function run() fi done - cmdline="TESTNAME=$testname ACCEL=$accel ./$TEST_DIR-run $kernel -smp $smp $opts" + cmdline="TESTNAME=$testname ACCEL=$accel TIMEOUT=$timeout ./$TEST_DIR-run $kernel -smp $smp $opts" if [ $verbose != 0 ]; then echo $cmdline fi @@ -78,6 +79,8 @@ function run() echo -e "\e[31mFAIL\e[0m $1 (debug-exit not called)" elif [ $ret -eq 1 ]; then echo -e "\e[32mPASS\e[0m $1" + elif [ $ret -eq 124 ]; then + echo -e "\e[31mFAIL\e[0m $1 (timeout; duration=$timeout)" elif [ $ret -ge 128 ]; then ((sig=ret-128)) echo -e "\e[31mFAIL\e[0m $1 (got signal $sig)" diff --git a/scripts/functions.bash b/scripts/functions.bash index f13fe6f88f23d..ee9143c5d630d 100644 --- a/scripts/functions.bash +++ b/scripts/functions.bash @@ -11,12 +11,13 @@ function for_each_unittest() local arch local check local accel + local timeout exec {fd}<"$unittests" while read -u $fd line; do if [[ "$line" =~ ^\[(.*)\]$ ]]; then - "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" "$accel" + "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" "$accel" "$timeout" testname=${BASH_REMATCH[1]} smp=1 kernel="" @@ -25,6 +26,7 @@ function for_each_unittest() arch="" check="" accel="" + timeout="" elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then kernel=$TEST_DIR/${BASH_REMATCH[1]} elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then @@ -39,8 +41,10 @@ function for_each_unittest() check=${BASH_REMATCH[1]} elif [[ $line =~ ^accel\ *=\ *(.*)$ ]]; then accel=${BASH_REMATCH[1]} + elif [[ $line =~ ^timeout\ *=\ *(.*)$ ]]; then + timeout=${BASH_REMATCH[1]} fi done - "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" "$accel" + "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" "$accel" "$timeout" exec {fd}<&- } diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh index 94ea0467c5be6..80eb269b430c6 100755 --- a/scripts/mkstandalone.sh +++ b/scripts/mkstandalone.sh @@ -30,6 +30,7 @@ function mkstandalone() local arch="$6" local check="$7" local accel="$8" + local timeout="$9" if [ -z "$testname" ]; then return 1 @@ -97,8 +98,12 @@ if [ "\$QEMU" ]; then qemu="\$QEMU" fi +if [ "$timeout" ]; then + timeout_cmd='timeout --foreground $timeout' +fi + MAX_SMP="MAX_SMP" -echo \$qemu $cmdline -smp $smp $opts +echo \$timeout_cmd \$qemu $cmdline -smp $smp $opts cmdline="\`echo '$cmdline' | sed s%$kernel%_NO_FILE_4Uhere_%\`" if \$qemu \$cmdline 2>&1 | grep 'No accelerator found'; then @@ -110,7 +115,7 @@ else done cmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`" - \$qemu \$cmdline -smp $smp $opts 2> \$errlog + \$timeout_cmd \$qemu \$cmdline -smp $smp $opts 2> \$errlog ret=\$? echo Return value from qemu: \$ret diff --git a/x86/run b/x86/run index 39a7cb92115cb..b82fea17cb040 100755 --- a/x86/run +++ b/x86/run @@ -43,10 +43,14 @@ else fi command="${qemu} -enable-kvm $pc_testdev -vnc none -serial stdio $pci_testdev $hyperv_testdev -kernel" -echo ${command} "$@" + +if [ "$TIMEOUT" ]; then + timeout_cmd="timeout --foreground $TIMEOUT" +fi +echo $timeout_cmd ${command} "$@" if [ "$DRYRUN" != "yes" ]; then - ${command} "$@" + $timeout_cmd ${command} "$@" ret=$? echo Return value from qemu: $ret exit $ret diff --git a/x86/unittests.cfg b/x86/unittests.cfg index ae41781b5b72b..929521d3634a5 100644 --- a/x86/unittests.cfg +++ b/x86/unittests.cfg @@ -12,6 +12,7 @@ # # specific to only one. # groups = <group_name1> <group_name2> ... # Used to identify test cases # # with run_tests -g ... +# timeout = <duration> # Optionally specify a timeout. ############################################################################## [apic] -- 2.4.3 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html