commit | ee30cf1442cb512ea620877472897914e6b4dcd4 | [log] [tgz] |
---|---|---|
author | Thomas Huth <thuth@redhat.com> | Tue Mar 28 08:05:00 2017 +0200 |
committer | Thomas Huth <thuth@redhat.com> | Tue Mar 28 08:08:27 2017 +0200 |
tree | 13cde1225820e23d58f598b6b5057651d42bc36b | |
parent | 37abdda9139f98f8fb1d3d2bd9c03addc1e0797b [diff] |
powerpc: Add Special Purpose Register persistency test This test has two purposes: First, check whether the hypervisor can be destabilized by writing random values into the SPRs of the PowerPC CPU (this indeed revealed a bug last year, see CVE-2016-3044). Second, this test can be used to check whether the SPRs are synchronized properly between the KVM host CPU and QEMU, e.g. when migrating the VM from one QEMU instance to another. The test first fills the various SPRs with some non-zero value, then reads the values back into a first array. It then either sleeps a short period of time (for testing without migration, in the hope that we're rescheduled on another host CPU), or it waits for a key or NMI (with the '-w' option) so that it is possible to migrate the VM before continuing. The test then finally reads the values from the SPRs back into another array and then compares them with the initial values. Currently the test only supports the SPRs from the PowerISA v2.01 (PowerPC 970) and PowerISA v2.07 specification (i.e. POWER8 CPUs), but other versions should be pretty easy to add later. Signed-off-by: Thomas Huth <thuth@redhat.com>
See http://www.linux-kvm.org/page/KVM-unit-tests for a high-level description of this project, as well as running tests and adding tests HOWTOs.
This directory contains sources for a kvm test suite.
To create the test images do:
./configure make
in this directory. Test images are created in .//*.flat
The tests can be built as standalone To create and use standalone tests do:
./configure make standalone (send tests/some-test somewhere) (go to somewhere) ./some-test
‘make install’ will install all tests in PREFIX/share/kvm-unit-tests/tests, each as a standalone test.
Then use the runner script to detect the correct invocation and invoke the test:
./x86-run ./x86/msr.flat
or:
./run_tests.sh
to run them all.
To select a specific qemu binary, specify the QEMU= environment variable:
QEMU=/tmp/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run ./x86/msr.flat
Unit tests use QEMU's ‘-append <args...>’ parameter for command line inputs, i.e. all args will be available as argv strings in main(). Additionally a file of the form
KEY=VAL KEY2=VAL ...
may be passed with ‘-initrd ’ to become the unit test's environ, which can then be accessed in the usual ways, e.g. VAL = getenv(“KEY”) Any key=val strings can be passed, but some have reserved meanings in the framework. The list of reserved environment variables is below
QEMU_ACCEL ... either kvm or tcg QEMU_VERSION_STRING ... string of the form qemu -h | head -1
KERNEL_VERSION_STRING ... string of the form uname -r
Additionally these self-explanatory variables are reserved
QEMU_MAJOR, QEMU_MINOR, QEMU_MICRO, KERNEL_VERSION, KERNEL_PATCHLEVEL, KERNEL_SUBLEVEL, KERNEL_EXTRAVERSION
.: configure script, top-level Makefile, and run_tests.sh ./scripts: helper scripts for building and running tests ./lib: general architecture neutral services for the tests ./lib/<ARCH>: architecture dependent services for the tests ./<ARCH>: the sources of the tests and the created objects/images
See /README for architecture specific documentation.
Currently there is a mix of indentation styles so any changes to existing files should be consistent with the existing style. For new files:
Patches are welcome at the KVM mailing list kvm@vger.kernel.org.
Please prefix messages with: [kvm-unit-tests PATCH]
You can add the following to .git/config to do this automatically for you:
[format] subjectprefix = kvm-unit-tests PATCH
Additionally it‘s helpful to have a common order of file types in patches. Our chosen order attempts to place the more declarative files before the code files. We also start with common code and finish with unit test code. git-diff’s orderFile feature allows us to specify the order in a file. The orderFile we use is scripts/git.difforder
. Adding the config with git config diff.orderFile scripts/git.difforder
enables it.