Signed-off-by: Andrew Jones <drjo...@redhat.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to