[kvm-unit-tests PATCH v4 04/13] scripts: Use an associative array for qemu argument names

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


Move away from hardcoded qemu arguments and use instead an associative
array to get the needed arguments. This paves the way for adding kvmtool
support to the scripts, which has a different syntax for the same VM
configuration parameters.

Suggested-by: Andrew Jones <andrew.jones at linux.dev>
Signed-off-by: Alexandru Elisei <alexandru.elisei at arm.com>
---

Changes v3->v4:

* Renamed vmm_opts to vmm_optname.
* Dropped entries for 'kernel' and 'initrd' in vmm_optname because they weren't
used in this patch.
* Use vmm_optname_nr_cpus() and vmm_optname_args() instead of directly indexing
into vmm_optname.
* Dropped the check for empty $test_args in scripts/runtime.bash::run() by
having $test_args already contain --append if not empty in
scripts/common.bash::for_each_unittest().

 scripts/common.bash  | 11 ++++++++---
 scripts/runtime.bash |  7 +------
 scripts/vmm.bash     | 15 +++++++++++++++
 3 files changed, 24 insertions(+), 9 deletions(-)

diff --git a/scripts/common.bash b/scripts/common.bash
index 9deb87d4050d..ae127bd4e208 100644
--- a/scripts/common.bash
+++ b/scripts/common.bash
@@ -1,4 +1,5 @@
 source config.mak
+source scripts/vmm.bash
 
 function for_each_unittest()
 {
@@ -26,8 +27,12 @@ function for_each_unittest()
 				$(arch_cmd) "$cmd" "$testname" "$groups" "$smp" "$kernel" "$test_args" "$opts" "$arch" "$machine" "$check" "$accel" "$timeout"
 			fi
 			testname=$rematch
-			smp=1
+			smp="$(vmm_optname_nr_cpus) 1"
 			kernel=""
+			# Intentionally don't use -append if test_args is empty
+			# because qemu interprets the first word after
+			# -append as a kernel parameter instead of a command
+			# line option.
 			test_args=""
 			opts=""
 			groups=""
@@ -39,9 +44,9 @@ function for_each_unittest()
 		elif [[ $line =~ ^file\ *=\ *(.*)$ ]]; then
 			kernel=$TEST_DIR/${BASH_REMATCH[1]}
 		elif [[ $line =~ ^smp\ *=\ *(.*)$ ]]; then
-			smp=${BASH_REMATCH[1]}
+			smp="$(vmm_optname_nr_cpus) ${BASH_REMATCH[1]}"
 		elif [[ $line =~ ^test_args\ *=\ *(.*)$ ]]; then
-			test_args=${BASH_REMATCH[1]}
+			test_args="$(vmm_optname_args) ${BASH_REMATCH[1]}"
 		elif [[ $line =~ ^(extra_params|qemu_params)\ *=\ *'"""'(.*)$ ]]; then
 			opts=${BASH_REMATCH[2]}$'\n'
 			while read -r -u $fd; do
diff --git a/scripts/runtime.bash b/scripts/runtime.bash
index bc17b89f4ff5..86d8a2cd8528 100644
--- a/scripts/runtime.bash
+++ b/scripts/runtime.bash
@@ -34,7 +34,7 @@ premature_failure()
 get_cmdline()
 {
     local kernel=$1
-    echo "TESTNAME=$testname TIMEOUT=$timeout MACHINE=$machine ACCEL=$accel $RUNTIME_arch_run $kernel -smp $smp $opts"
+    echo "TESTNAME=$testname TIMEOUT=$timeout MACHINE=$machine ACCEL=$accel $RUNTIME_arch_run $kernel $smp $test_args $opts"
 }
 
 skip_nodefault()
@@ -88,11 +88,6 @@ function run()
     local accel="${10}"
     local timeout="${11:-$TIMEOUT}" # unittests.cfg overrides the default
 
-    # If $test_args is empty, qemu will interpret the first option after -append
-    # as a test argument instead of a qemu option, so make sure that doesn't
-    # happen.
-    [ -n "$test_args" ] && opts="-append $test_args $opts"
-
     if [ "${CONFIG_EFI}" == "y" ]; then
         kernel=${kernel/%.flat/.efi}
     fi
diff --git a/scripts/vmm.bash b/scripts/vmm.bash
index 8365c1424a3f..7629b2b9146e 100644
--- a/scripts/vmm.bash
+++ b/scripts/vmm.bash
@@ -1,3 +1,18 @@
+declare -A vmm_optname=(
+	[qemu,args]='-append'
+	[qemu,nr_cpus]='-smp'
+)
+
+function vmm_optname_args()
+{
+	echo ${vmm_optname[$(vmm_get_target),args]}
+}
+
+function vmm_optname_nr_cpus()
+{
+	echo ${vmm_optname[$(vmm_get_target),nr_cpus]}
+}
+
 function vmm_get_target()
 {
 	if [[ -z "$TARGET" ]]; then
-- 
2.50.0



More information about the Linuxppc-dev mailing list