[kvm-unit-tests PATCH v4 03/13] scripts: Refuse to run the tests if not configured for qemu

Alexandru Elisei alexandru.elisei at arm.com
Thu Jun 26 01:48:03 AEST 2025


Arm and arm64 support running the tests under kvmtool. kvmtool has a
different command line syntax for configuring and running a virtual
machine, and the automated scripts know only how to use qemu.

One issue with that is even though the tests have been configured for
kvmtool (with ./configure --target=kvmtool), the scripts will use qemu to
run the tests, and without looking at the logs there is no indication that
the tests haven't been run with kvmtool, as configured.

Another issue is that kvmtool uses a different address for the UART and
when running the tests with qemu via the scripts, this warning is
displayed:

WARNING: early print support may not work. Found uart at 0x9000000, but early base is 0x1000000.

which might trip up an unsuspected user.

There are four different ways to run a test using the test infrastructure:
with run_tests.sh, by invoking arm/run or arm/efi/run with the correct
parameters (only the arm directory is mentioned here because the tests can
be configured for kvmtool only on arm and arm64), and by creating
standalone tests.

run_tests.sh ends up executing either arm/run or arm/efi/run, so add a
check to these two scripts for the test target, and refuse to run the test
if kvm-unit-tests has been configured for kvmtool.

mkstandalone.sh also executes arm/run or arm/efi run, but the usual use
case for standalone tests is to compile them on one machine, and then to
run them on a different machine. This two step process can be time
consuming, so save the user time (and frustration!) and add a check
directly to mkstandalone.sh.

Reviewed-by: Shaoqin Huang <shahuang at redhat.com>
Signed-off-by: Alexandru Elisei <alexandru.elisei at arm.com>
---

Changes v3->v4:

* Renamed check_vmm_supported() to vmm_check_supported().
* Added function vmm_get_target().
* Added Reviewed-by from Shaoqin.
* Fixed typo s/execuing/executing (Drew).

 arm/efi/run             |  3 +++
 arm/run                 |  4 ++++
 scripts/mkstandalone.sh |  6 +++++-
 scripts/vmm.bash        | 25 +++++++++++++++++++++++++
 4 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 scripts/vmm.bash

diff --git a/arm/efi/run b/arm/efi/run
index 8f41fc02df31..38800e8bfa13 100755
--- a/arm/efi/run
+++ b/arm/efi/run
@@ -11,6 +11,9 @@ if [ ! -f config.mak ]; then
 fi
 source config.mak
 source scripts/arch-run.bash
+source scripts/vmm.bash
+
+vmm_check_supported
 
 if [ -f /usr/share/qemu-efi-aarch64/QEMU_EFI.fd ]; then
 	DEFAULT_UEFI=/usr/share/qemu-efi-aarch64/QEMU_EFI.fd
diff --git a/arm/run b/arm/run
index ef58558231b7..edf0c1dd1b41 100755
--- a/arm/run
+++ b/arm/run
@@ -7,7 +7,11 @@ if [ -z "$KUT_STANDALONE" ]; then
 	fi
 	source config.mak
 	source scripts/arch-run.bash
+	source scripts/vmm.bash
 fi
+
+vmm_check_supported
+
 qemu_cpu="$TARGET_CPU"
 
 if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh
index c4ba81f18935..9c5768563757 100755
--- a/scripts/mkstandalone.sh
+++ b/scripts/mkstandalone.sh
@@ -6,6 +6,9 @@ if [ ! -f config.mak ]; then
 fi
 source config.mak
 source scripts/common.bash
+source scripts/vmm.bash
+
+vmm_check_supported
 
 temp_file ()
 {
@@ -71,7 +74,8 @@ generate_test ()
 	args[3]='$bin'
 
 	(echo "#!/usr/bin/env bash"
-	 cat scripts/arch-run.bash "$TEST_DIR/run") | temp_file RUNTIME_arch_run
+	 cat scripts/vmm.bash scripts/arch-run.bash "$TEST_DIR/run") \
+		| temp_file RUNTIME_arch_run
 
 	echo "exec {stdout}>&1"
 	echo "RUNTIME_log_stdout () { cat >&\$stdout; }"
diff --git a/scripts/vmm.bash b/scripts/vmm.bash
new file mode 100644
index 000000000000..8365c1424a3f
--- /dev/null
+++ b/scripts/vmm.bash
@@ -0,0 +1,25 @@
+function vmm_get_target()
+{
+	if [[ -z "$TARGET" ]]; then
+		echo "qemu"
+	else
+		echo "$TARGET"
+	fi
+}
+
+function vmm_check_supported()
+{
+	# We're not interested in the return code for vmm_get_target().
+	# shellcheck disable=SC2155
+	local target=$(vmm_get_target)
+
+	case "$target" in
+	qemu)
+		return 0
+		;;
+	*)
+		echo "$0 does not support target '$target'"
+		exit 2
+		;;
+	esac
+}
-- 
2.50.0



More information about the Linuxppc-dev mailing list