Re: [kvm-unit-tests PATCH 3/3] arm/run: use ACCEL to choose between kvm and tcg

Andrew Jones
2015-08-04T07:18:10Z

On Mon, Aug 03, 2015 at 07:51:51PM +0200, Andrew Jones wrote:
> Inspired by a patch by Alex Bennée. This version uses a new
> unittests.cfg variable and includes support for DRYRUN.
>
> Signed-off-by: Andrew Jones <drjones@redhat.com>
> ---
>
> Another difference with Alex's patch is we no longer output
> 'Running with TCG', as I don't think it's necessary. The
> command line captures that, and the whole point of the patch
> is to silence the '"kvm" accelerator not found.' messages
> anyway.

I forgot to actually test mkstandlone... The dryrun stuff
in this patch isn't sufficient for the new unittests variable.
I've worked up a v2 and will post the series again shortly.

drew

>
> arm/run | 36 ++++++++++++++++++++++++++++++------
> arm/unittests.cfg | 4 +++-
> run_tests.sh | 3 ++-
> scripts/functions.bash | 8 ++++++--
> 4 files changed, 41 insertions(+), 10 deletions(-)
>
> diff --git a/arm/run b/arm/run
> index 8cc2fa2571967..1208a22b776d9 100755
> --- a/arm/run
> +++ b/arm/run
> @@ -7,6 +7,35 @@ fi
> source config.mak
> processor="$PROCESSOR"
>
> +if [ -c /dev/kvm ]; then
> + if [ "$HOST" = "arm" ] && [ "$ARCH" = "arm" ]; then
> + kvm_available=yes
> + elif [ "$HOST" = "aarch64" ]; then
> + kvm_available=yes
> + fi
> +fi
> +
> +if [ "$kvm_available" != "yes" ] && [ "$ACCEL" = "kvm" ]; then
> + printf "skip $TESTNAME (kvm only)\n\n"
> + exit 2
> +fi
> +
> +if [ "$kvm_available" != "yes" ] || [ "$ACCEL" = "tcg" ]; then
> + accel=",accel=tcg"
> +else
> + accel=",accel=kvm"
> + if [ "$ARCH" = "arm64" ]; then
> + # arm64 must use '-cpu host' with kvm
> + processor="host"
> + fi
> +fi
> +
> +if [ "$DRYRUN" = "yes" ]; then
> + # Output kvm with tcg fallback for dryrun, since the
> + # command line we output may get used elsewhere.
> + accel=",accel=kvm:tcg"
> +fi
> +
> qemu="${QEMU:-qemu-system-$ARCH_NAME}"
> qpath=$(which $qemu 2>/dev/null)
>
> @@ -33,15 +62,10 @@ if $qemu $M -chardev testdev,id=id -initrd . 2>&1 \
> exit 2
> fi
>
> -M='-machine virt,accel=kvm:tcg'
> chr_testdev='-device virtio-serial-device'
> chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd'
>
> -# arm64 must use '-cpu host' with kvm
> -if [ "$(arch)" = "aarch64" ] && [ "$ARCH" = "arm64" ] && [ -c /dev/kvm ]; then
> - processor="host"
> -fi
> -
> +M+=$accel
> command="$qemu $M -cpu $processor $chr_testdev"
> command+=" -display none -serial stdio -kernel"
> echo $command "$@"
> diff --git a/arm/unittests.cfg b/arm/unittests.cfg
> index e068a0cdd9c1f..243c13301811b 100644
> --- a/arm/unittests.cfg
> +++ b/arm/unittests.cfg
> @@ -3,8 +3,10 @@
> # file = foo.flat # Name of the flat file to be used
> # smp = 2 # Number of processors the VM will use during this test
> # extra_params = -append <params...> # Additional parameters used
> -# arch = arm/arm64 # Only if test case is specific to one
> +# arch = arm|arm64 # Only if test case is specific to one
> # groups = group1 group2 # Used to identify test cases with run_tests -g ...
> +# accel = kvm|tcg # Optionally specify if test must run with kvm or tcg.
> +# # If not specified, then kvm will be used when available.
>
> #
> # Test that the configured number of processors (smp = <num>), and
> diff --git a/run_tests.sh b/run_tests.sh
> index 80b87823c3358..b1b4c541ecaea 100755
> --- a/run_tests.sh
> +++ b/run_tests.sh
> @@ -20,6 +20,7 @@ function run()
> local opts="$5"
> local arch="$6"
> local check="$7"
> + local accel="$8"
>
> if [ -z "$testname" ]; then
> return
> @@ -46,7 +47,7 @@ function run()
> fi
> done
>
> - cmdline="TESTNAME=$testname ./$TEST_DIR-run $kernel -smp $smp $opts"
> + cmdline="TESTNAME=$testname ACCEL=$accel ./$TEST_DIR-run $kernel -smp $smp $opts"
> if [ $verbose != 0 ]; then
> echo $cmdline
> fi
> diff --git a/scripts/functions.bash b/scripts/functions.bash
> index 7ed5a517250bc..f13fe6f88f23d 100644
> --- a/scripts/functions.bash
> +++ b/scripts/functions.bash
> @@ -10,12 +10,13 @@ function for_each_unittest()
> local groups
> local arch
> local check
> + local accel
>
> exec {fd}<"$unittests"
>
> while read -u $fd line; do
> if [[ "$line" =~ ^\[(.*)\]$ ]]; then
> - "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check"
> + "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" "$accel"
> testname=${BASH_REMATCH[1]}
> smp=1
> kernel=""
> @@ -23,6 +24,7 @@ function for_each_unittest()
> groups=""
> arch=""
> check=""
> + accel=""
> elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then
> kernel=$TEST_DIR/${BASH_REMATCH[1]}
> elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then
> @@ -35,8 +37,10 @@ function for_each_unittest()
> arch=${BASH_REMATCH[1]}
> elif [[ $line =~ ^check\ *=\ *(.*)$ ]]; then
> check=${BASH_REMATCH[1]}
> + elif [[ $line =~ ^accel\ *=\ *(.*)$ ]]; then
> + accel=${BASH_REMATCH[1]}
> fi
> done
> - "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check"
> + "$cmd" "$testname" "$groups" "$smp" "$kernel" "$opts" "$arch" "$check" "$accel"
> exec {fd}<&-
> }
> --
> 2.4.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe kvm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html