[kvm-unit-tests PATCH v4 04/13] scripts: Use an associative array for qemu argument names
From: Alexandru Elisei <hidden>
Date: 2025-06-25 15:49:25
Also in:
kvm, kvm-riscv, kvmarm, linux-s390
Subsystem:
the rest · Maintainer:
Linus Torvalds
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 <redacted> Signed-off-by: Alexandru Elisei <redacted> --- 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