xref: /kvm-unit-tests/scripts/runtime.bash (revision 5b842da94e408b4c33a840c937c29b43dfaabdcd)
1103832e8SRadim Krčmář: "${RUNTIME_arch_run?}"
2103832e8SRadim Krčmář
36a53fc26SRadim Krčmářqemu=${QEMU:-qemu-system-$ARCH}
46a53fc26SRadim Krčmář
56a53fc26SRadim Krčmářfunction run()
66a53fc26SRadim Krčmář{
76a53fc26SRadim Krčmář    local testname="$1"
86a53fc26SRadim Krčmář    local groups="$2"
96a53fc26SRadim Krčmář    local smp="$3"
106a53fc26SRadim Krčmář    local kernel="$4"
116a53fc26SRadim Krčmář    local opts="$5"
126a53fc26SRadim Krčmář    local arch="$6"
136a53fc26SRadim Krčmář    local check="$7"
146a53fc26SRadim Krčmář    local accel="$8"
156a53fc26SRadim Krčmář
166a53fc26SRadim Krčmář    if [ -z "$testname" ]; then
176a53fc26SRadim Krčmář        return
186a53fc26SRadim Krčmář    fi
196a53fc26SRadim Krčmář
206a53fc26SRadim Krčmář    if [ -n "$only_group" ] && ! grep -q "$only_group" <<<$groups; then
216a53fc26SRadim Krčmář        return
226a53fc26SRadim Krčmář    fi
236a53fc26SRadim Krčmář
246a53fc26SRadim Krčmář    if [ -n "$arch" ] && [ "$arch" != "$ARCH" ]; then
256a53fc26SRadim Krčmář        echo "skip $1 ($arch only)"
266a53fc26SRadim Krčmář        return
276a53fc26SRadim Krčmář    fi
286a53fc26SRadim Krčmář
296a53fc26SRadim Krčmář    # check a file for a particular value before running a test
306a53fc26SRadim Krčmář    # the check line can contain multiple files to check separated by a space
316a53fc26SRadim Krčmář    # but each check parameter needs to be of the form <path>=<value>
326a53fc26SRadim Krčmář    for check_param in ${check[@]}; do
336a53fc26SRadim Krčmář        path=${check_param%%=*}
346a53fc26SRadim Krčmář        value=${check_param#*=}
356a53fc26SRadim Krčmář        if [ "$path" ] && [ "$(cat $path)" != "$value" ]; then
366a53fc26SRadim Krčmář            echo "skip $1 ($path not equal to $value)"
376a53fc26SRadim Krčmář            return
386a53fc26SRadim Krčmář        fi
396a53fc26SRadim Krčmář    done
406a53fc26SRadim Krčmář
41103832e8SRadim Krčmář    cmdline="TESTNAME=$testname ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"
42*5b842da9SAndrew Jones    if [ "$verbose" = "yes" ]; then
436a53fc26SRadim Krčmář        echo $cmdline
446a53fc26SRadim Krčmář    fi
456a53fc26SRadim Krčmář
466a53fc26SRadim Krčmář    # extra_params in the config file may contain backticks that need to be
476a53fc26SRadim Krčmář    # expanded, so use eval to start qemu
48103832e8SRadim Krčmář    eval $cmdline
495af378ddSRadim Krčmář    ret=$?
506a53fc26SRadim Krčmář
515af378ddSRadim Krčmář    if [ $ret -le 1 ]; then
526a53fc26SRadim Krčmář        echo -e "\e[32mPASS\e[0m $1"
536a53fc26SRadim Krčmář    else
546a53fc26SRadim Krčmář        echo -e "\e[31mFAIL\e[0m $1"
556a53fc26SRadim Krčmář    fi
565af378ddSRadim Krčmář
575af378ddSRadim Krčmář    return $ret
586a53fc26SRadim Krčmář}
596a53fc26SRadim Krčmář
606a53fc26SRadim KrčmářMAX_SMP=$(getconf _NPROCESSORS_CONF)
61bc52c0c8SAndrew Jones#
62bc52c0c8SAndrew Jones# Probe for MAX_SMP, in case it's less than the number of host cpus.
63bc52c0c8SAndrew Jones#
64bc52c0c8SAndrew Jones# This probing currently only works for ARM, as x86 bails on another
65bc52c0c8SAndrew Jones# error first. Also, this probing isn't necessary for any ARM hosts
66bc52c0c8SAndrew Jones# running kernels later than v4.3, i.e. those including ef748917b52
67bc52c0c8SAndrew Jones# "arm/arm64: KVM: Remove 'config KVM_ARM_MAX_VCPUS'". So, at some
68bc52c0c8SAndrew Jones# point when maintaining the while loop gets too tiresome, we can
69bc52c0c8SAndrew Jones# just remove it...
70bc52c0c8SAndrew Joneswhile $RUNTIME_arch_run _NO_FILE_4Uhere_ -smp $MAX_SMP \
71bc52c0c8SAndrew Jones		|& grep -qi 'exceeds max CPUs'; do
726a53fc26SRadim Krčmář	((--MAX_SMP))
736a53fc26SRadim Krčmářdone
74