* [kvm-unit-tests PATCH 3/3] arm/run: use ACCEL to choose between kvm and tcg
2015-08-04 7:25 [kvm-unit-tests PATCH 0/3] tcg is becoming a first class citizen Andrew Jones
2015-08-04 7:25 ` [kvm-unit-tests PATCH 1/3] configure: emit HOST=$host to config.mak Andrew Jones
2015-08-04 7:25 ` [kvm-unit-tests PATCH 2/3] run_tests: pass test name to run script Andrew Jones
@ 2015-08-04 7:25 ` Andrew Jones
2015-08-04 8:05 ` [kvm-unit-tests PATCH 0/3] tcg is becoming a first class citizen Andrew Jones
3 siblings, 0 replies; 6+ messages in thread
From: Andrew Jones @ 2015-08-04 7:25 UTC (permalink / raw)
To: kvm; +Cc: alex.bennee, pbonzini
Inspired by a patch by Alex Bennée. This version uses a new
unittests.cfg variable and includes support for mkstandalone.
Signed-off-by: Andrew Jones <drjones@redhat.com>
---
arm/run | 43 +++++++++++++++++++++++++++++++++++++------
arm/unittests.cfg | 4 +++-
run_tests.sh | 3 ++-
scripts/functions.bash | 8 ++++++--
scripts/mkstandalone.sh | 15 +++++++++++----
5 files changed, 59 insertions(+), 14 deletions(-)
diff --git a/arm/run b/arm/run
index 8cc2fa2571967..4a648697d7fb5 100755
--- a/arm/run
+++ b/arm/run
@@ -7,6 +7,42 @@ 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 [ "$ACCEL" = "kvm" ] && [ "$kvm_available" != "yes" ] &&
+ [ "$DRYRUN" != "yes" ]; then
+ printf "skip $TESTNAME (kvm only)\n\n"
+ exit 2
+fi
+
+if [ -z "$ACCEL" ]; then
+ if [ "$DRYRUN" = "yes" ]; then
+ # Output kvm with tcg fallback for dryrun (when both are
+ # allowed), since the command line we output may get used
+ # elsewhere.
+ ACCEL="kvm:tcg"
+ elif [ "$kvm_available" = "yes" ]; then
+ ACCEL="kvm"
+ else
+ ACCEL="tcg"
+ fi
+fi
+
+if [ "$ARCH" = "arm64" ]; then
+ if [[ $ACCEL =~ kvm ]]; then
+ # arm64 must use '-cpu host' with kvm, and we can't use
+ # '-cpu host' with tcg, so we force kvm-only (no fallback)
+ ACCEL="kvm"
+ processor="host"
+ fi
+fi
+
qemu="${QEMU:-qemu-system-$ARCH_NAME}"
qpath=$(which $qemu 2>/dev/null)
@@ -33,15 +69,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=$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}<&-
}
diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh
index 4cf346ab87d24..0c39451e538c9 100755
--- a/scripts/mkstandalone.sh
+++ b/scripts/mkstandalone.sh
@@ -29,6 +29,7 @@ function mkstandalone()
local opts="$5"
local arch="$6"
local check="$7"
+ local accel="$8"
if [ -z "$testname" ]; then
return 1
@@ -39,7 +40,7 @@ function mkstandalone()
fi
standalone=tests/$testname
- cmdline=$(DRYRUN=yes ./$TEST_DIR-run $kernel)
+ cmdline=$(DRYRUN=yes ACCEL=$accel ./$TEST_DIR-run $kernel)
if [ $? -ne 0 ]; then
echo $cmdline
exit 1
@@ -94,10 +95,16 @@ qemu="$qemu"
if [ "\$QEMU" ]; then
qemu="\$QEMU"
fi
-cmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`"
echo \$qemu $cmdline -smp $smp $opts
-\$qemu \$cmdline -smp $smp $opts
-ret=\$?
+
+cmdline="\`echo '$cmdline' | sed s%$kernel%_NO_FILE_4Uhere_%\`"
+if \$qemu \$cmdline 2>&1 | grep 'No accelerator found'; then
+ ret=2
+else
+ cmdline="\`echo '$cmdline' | sed s%$kernel%\$bin%\`"
+ \$qemu \$cmdline -smp $smp $opts
+ ret=\$?
+fi
echo Return value from qemu: \$ret
if [ \$ret -le 1 ]; then
echo PASS $testname 1>&2
--
2.4.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [kvm-unit-tests PATCH 0/3] tcg is becoming a first class citizen
2015-08-04 7:25 [kvm-unit-tests PATCH 0/3] tcg is becoming a first class citizen Andrew Jones
` (2 preceding siblings ...)
2015-08-04 7:25 ` [kvm-unit-tests PATCH 3/3] arm/run: use ACCEL to choose between kvm and tcg Andrew Jones
@ 2015-08-04 8:05 ` Andrew Jones
3 siblings, 0 replies; 6+ messages in thread
From: Andrew Jones @ 2015-08-04 8:05 UTC (permalink / raw)
To: kvm; +Cc: alex.bennee, pbonzini
Crap. Forgot -v2 on my format-patch command line...
Paolo, should I repost?
drew
On Tue, Aug 04, 2015 at 09:25:52AM +0200, Andrew Jones wrote:
> At least on the ARM side of things we're making sure unit tests can
> be used for [MT]TCG, as well as for KVM. This series adds support to
> unittests.cfg to allow us to specify kvm vs. tcg, as not all tests
> will be able (should/need) to run on both. The first patch is a repost
> of one of Alex's pending patches, as the 3rd patch depends on it. The
> 3rd patch obsoletes/replaces Alex's pending "arm/run: introduce
> usingkvm var and use it" patch.
>
> Alex Bennée (1):
> configure: emit HOST=$host to config.mak
>
> Andrew Jones (2):
> run_tests: pass test name to run script
> arm/run: use ACCEL to choose between kvm and tcg
>
> arm/run | 43 +++++++++++++++++++++++++++++++++++++------
> arm/unittests.cfg | 4 +++-
> configure | 2 ++
> run_tests.sh | 3 ++-
> scripts/functions.bash | 8 ++++++--
> scripts/mkstandalone.sh | 15 +++++++++++----
> 6 files changed, 61 insertions(+), 14 deletions(-)
>
> --
> 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
^ permalink raw reply [flat|nested] 6+ messages in thread