#
61ff9901 |
| 04-Jul-2025 |
Andrew Jones <andrew.jones@linux.dev> |
Merge branch 'arm/queue' into 'master'
scripts: Add support for kvmtool
See merge request kvm-unit-tests/kvm-unit-tests!79
|
#
463cd0ff |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Enable kvmtool
Everything is in place to run the tests using kvmtool:
$ ./configure --target=kvmtool $ make clean && make $ KVMTOOL=<path/to/kvmtool> ./run_tests.sh
so enable it, and remo
scripts: Enable kvmtool
Everything is in place to run the tests using kvmtool:
$ ./configure --target=kvmtool $ make clean && make $ KVMTOOL=<path/to/kvmtool> ./run_tests.sh
so enable it, and remove ERRATA_FORCE=y when configuring for kvmtool, because the runner will generate and pass the correct environment to kvmtool.
Support for EFI tests is missing. That's because distros don't ship a EDK2 binary compiled for kvmtool, and on top of that kvm-unit-tests as an EFI app hasn't been tested to work with kvmtool.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
4bf367d9 |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Do not probe for maximum number of VCPUs when using kvmtool
The --probe-maxsmp parameter updates MAX_SMP with the maximum number of VCPUs that the host supports. Qemu will exit with an erro
scripts: Do not probe for maximum number of VCPUs when using kvmtool
The --probe-maxsmp parameter updates MAX_SMP with the maximum number of VCPUs that the host supports. Qemu will exit with an error when creating a virtual machine if the number of VCPUs is exceeded.
kvmtool behaves differently: it will automatically limit the number of VCPUs to the what KVM supports, which is exactly what --probe-maxsmp wants to achieve. When doing --probe-maxsmp with kvmtool, print a message explaining why it's redundant and don't do anything else.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
34940cc9 |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Detect kvmtool failure in premature_failure()
kvm-unit-tests assumes that if the VMM is able to get to where it tries to load the kernel, then the VMM and the configuration parameters will
scripts: Detect kvmtool failure in premature_failure()
kvm-unit-tests assumes that if the VMM is able to get to where it tries to load the kernel, then the VMM and the configuration parameters will also work for running the test. All of this is done in premature_failure().
Teach premature_failure() about the kvmtool's error message when it fails to load the dummy kernel.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
6eb072c2 |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Add default arguments for kvmtool
kvmtool, unless told otherwise, will do its best to make sure that a kernel successfully boots in a virtual machine. It does things like automatically crea
scripts: Add default arguments for kvmtool
kvmtool, unless told otherwise, will do its best to make sure that a kernel successfully boots in a virtual machine. It does things like automatically creating a rootfs and adding extra parameters to the kernel command line. This is actively harmful to kvm-unit-tests, because some tests parse the kernel command line and they will fail if they encounter the options added by kvmtool.
Fortunately for us, kvmtool commit 5613ae26b998 ("Add --nodefaults command line argument") addded the --nodefaults kvmtool parameter which disables all the implicit virtual machine configuration that cannot be disabled by using other parameters, like modifying the kernel command line. So always use --nodefaults to allow a test to run.
kvmtool can also be too verbose when running a virtual machine, and this is controlled by several parameters. Add those to the default kvmtool command line to reduce this verbosity to a minimum.
Before:
$ vm run arm/selftest.flat --cpus 2 --mem 256 --params "setup smp=2 mem=256" Info: # lkvm run -k arm/selftest.flat -m 256 -c 2 --name guest-5035 Unknown subtest
EXIT: STATUS=127 Warning: KVM compatibility warning. virtio-9p device was not detected. While you have requested a virtio-9p device, the guest kernel did not initialize it. Please make sure that the guest kernel was compiled with CONFIG_NET_9P_VIRTIO=y enabled in .config. Warning: KVM compatibility warning. virtio-net device was not detected. While you have requested a virtio-net device, the guest kernel did not initialize it. Please make sure that the guest kernel was compiled with CONFIG_VIRTIO_NET=y enabled in .config. Info: KVM session ended normally.
After:
$ vm run arm/selftest.flat --nodefaults --network mode=none --loglevel=warning --cpus 2 --mem 256 --params "setup smp=2 mem=256" PASS: selftest: setup: smp: number of CPUs matches expectation INFO: selftest: setup: smp: found 2 CPUs PASS: selftest: setup: mem: memory size matches expectation INFO: selftest: setup: mem: found 256 MB SUMMARY: 2 tests
EXIT: STATUS=1
Note that KVMTOOL_DEFAULT_OPTS can be overwritten by an environment variable with the same name, but it's not documented in the help string for run_tests.sh. This has been done on purpose, since overwritting KVMTOOL_DEFAULT_OPTS should only be necessary for debugging or development purposes.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
db9c4e1c |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Add support for kvmtool
Teach the arm runner to use kvmtool when kvm-unit-tests has been configured appropriately.
The test is ran using run_test_status(), and a 0 return code (which means
scripts: Add support for kvmtool
Teach the arm runner to use kvmtool when kvm-unit-tests has been configured appropriately.
The test is ran using run_test_status(), and a 0 return code (which means success) is converted to 1, because kvmtool does not have a testdev device to return the test exit code, so kvm-unit-tests must always parse the "EXIT: STATUS" line for the exit code.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
bd93a9c6 |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Add 'kvmtool_params' to test definition
arm/arm64 supports running tests under kvmtool, but kvmtool's syntax for running and configuring a virtual machine is different to qemu. To run tests
scripts: Add 'kvmtool_params' to test definition
arm/arm64 supports running tests under kvmtool, but kvmtool's syntax for running and configuring a virtual machine is different to qemu. To run tests using the automated test infrastructure, add a new test parameter, 'kvmtool_params'. The parameter serves the exact purpose as 'qemu_params', but using kvmtool's syntax.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
25c4b4b4 |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Use an associative array for qemu argument names
Move away from hardcoded qemu arguments and use instead an associative array to get the needed arguments. This paves the way for adding kvmt
scripts: Use an associative array for qemu argument names
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@linux.dev> Reviewed-by: Andrew Jones <andrew.jones@linux.dev> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|
#
9fcec1db |
| 25-Jun-2025 |
Alexandru Elisei <alexandru.elisei@arm.com> |
scripts: Refuse to run the tests if not configured for qemu
Arm and arm64 support running the tests under kvmtool. kvmtool has a different command line syntax for configuring and running a virtual m
scripts: Refuse to run the tests if not configured for qemu
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: Andrew Jones <andrew.jones@linux.dev> Reviewed-by: Shaoqin Huang <shahuang@redhat.com> Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com> Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
show more ...
|