Commit e093256d authored by Mark Brown's avatar Mark Brown Committed by Will Deacon

selftests: arm64: Add build and documentation for FP tests

Integrate the FP tests with the build system and add some documentation
for the ones run outside the kselftest infrastructure.  The content in
the README was largely written by Dave Martin with edits by me.
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Acked-by: default avatarDave Martin <Dave.Martin@arm.com>
Acked-by: default avatarShuah Khan <skhan@linuxfoundation.org>
Link: https://lore.kernel.org/r/20200819114837.51466-7-broonie@kernel.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent 25f47e3e
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
ARCH ?= $(shell uname -m 2>/dev/null || echo not) ARCH ?= $(shell uname -m 2>/dev/null || echo not)
ifneq (,$(filter $(ARCH),aarch64 arm64)) ifneq (,$(filter $(ARCH),aarch64 arm64))
ARM64_SUBTARGETS ?= tags signal pauth ARM64_SUBTARGETS ?= tags signal pauth fp
else else
ARM64_SUBTARGETS := ARM64_SUBTARGETS :=
endif endif
......
fpsimd-test
sve-probe-vls
sve-ptrace
sve-test
vlset
# SPDX-License-Identifier: GPL-2.0
CFLAGS += -I../../../../../usr/include/
TEST_GEN_PROGS := sve-ptrace sve-probe-vls
TEST_PROGS_EXTENDED := fpsimd-test fpsimd-stress sve-test sve-stress vlset
all: $(TEST_GEN_PROGS) $(TEST_PROGS_EXTENDED)
fpsimd-test: fpsimd-test.o
$(CC) -nostdlib $^ -o $@
sve-ptrace: sve-ptrace.o sve-ptrace-asm.o
sve-probe-vls: sve-probe-vls.o
sve-test: sve-test.o
$(CC) -nostdlib $^ -o $@
vlset: vlset.o
include ../../lib.mk
This directory contains a mix of tests integrated with kselftest and
standalone stress tests.
kselftest tests
===============
sve-probe-vls - Checks the SVE vector length enumeration interface
sve-ptrace - Checks the SVE ptrace interface
Running the non-kselftest tests
===============================
sve-stress performs an SVE context switch stress test, as described
below.
(The fpsimd-stress test works the same way; just substitute "fpsimd" for
"sve" in the following commands.)
The test runs until killed by the user.
If no context switch error was detected, you will see output such as
the following:
$ ./sve-stress
(wait for some time)
^C
Vector length: 512 bits
PID: 1573
Terminated by signal 15, no error, iterations=9467, signals=1014
Vector length: 512 bits
PID: 1575
Terminated by signal 15, no error, iterations=9448, signals=1028
Vector length: 512 bits
PID: 1577
Terminated by signal 15, no error, iterations=9436, signals=1039
Vector length: 512 bits
PID: 1579
Terminated by signal 15, no error, iterations=9421, signals=1039
Vector length: 512 bits
PID: 1581
Terminated by signal 15, no error, iterations=9403, signals=1039
Vector length: 512 bits
PID: 1583
Terminated by signal 15, no error, iterations=9385, signals=1036
Vector length: 512 bits
PID: 1585
Terminated by signal 15, no error, iterations=9376, signals=1039
Vector length: 512 bits
PID: 1587
Terminated by signal 15, no error, iterations=9361, signals=1039
Vector length: 512 bits
PID: 1589
Terminated by signal 15, no error, iterations=9350, signals=1039
If an error was detected, details of the mismatch will be printed
instead of "no error".
Ideally, the test should be allowed to run for many minutes or hours
to maximise test coverage.
KVM stress testing
==================
To try to reproduce the bugs that we have been observing, sve-stress
should be run in parallel in two KVM guests, while simultaneously
running on the host.
1) Start 2 guests, using the following command for each:
$ lkvm run --console=virtio -pconsole=hvc0 --sve Image
(Depending on the hardware GIC implementation, you may also need
--irqchip=gicv3. New kvmtool defaults to that if appropriate, but I
can't remember whether my branch is new enough for that. Try without
the option first.)
Kvmtool occupies the terminal until you kill it (Ctrl+A x),
or until the guest terminates. It is therefore recommended to run
each instance in separate terminal (use screen or ssh etc.) This
allows multiple guests to be run in parallel while running other
commands on the host.
Within the guest, the host filesystem is accessible, mounted on /host.
2) Run the sve-stress on *each* guest with the Vector-Length set to 32:
guest$ ./vlset --inherit 32 ./sve-stress
3) Run the sve-stress on the host with the maximum Vector-Length:
host$ ./vlset --inherit --max ./sve-stress
Again, the test should be allowed to run for many minutes or hours to
maximise test coverage.
If no error is detected, you will see output from each sve-stress
instance similar to that illustrated above; otherwise details of the
observed mismatches will be printed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment