Commit 89ff30b9 authored by Mark Brown's avatar Mark Brown Committed by Catalin Marinas

kselftest/arm64: Limit the maximum VL we try to set via ptrace

When SVE was initially merged we chose to export the maximum VQ in the ABI
as being 512, rather more than the architecturally supported maximum of 16.
For the ptrace tests this results in us generating a lot of test cases and
hence log output which are redundant since a system couldn't possibly
support them. Instead only check values up to the current architectural
limit, plus one more so that we're covering the constraining of higher
vector lengths.

This makes no practical difference to our test coverage, speeds things up
on slower consoles and makes the output much more managable.
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20230111-arm64-kselftest-ptrace-max-vl-v1-1-8167f41d1ad8@kernel.orgSigned-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent daac8353
...@@ -30,6 +30,16 @@ ...@@ -30,6 +30,16 @@
#define NT_ARM_SSVE 0x40b #define NT_ARM_SSVE 0x40b
#endif #endif
/*
* The architecture defines the maximum VQ as 16 but for extensibility
* the kernel specifies the SVE_VQ_MAX as 512 resulting in us running
* a *lot* more tests than are useful if we use it. Until the
* architecture is extended let's limit our coverage to what is
* currently allowed, plus one extra to ensure we cover constraining
* the VL as expected.
*/
#define TEST_VQ_MAX 17
struct vec_type { struct vec_type {
const char *name; const char *name;
unsigned long hwcap_type; unsigned long hwcap_type;
...@@ -55,7 +65,7 @@ static const struct vec_type vec_types[] = { ...@@ -55,7 +65,7 @@ static const struct vec_type vec_types[] = {
}, },
}; };
#define VL_TESTS (((SVE_VQ_MAX - SVE_VQ_MIN) + 1) * 4) #define VL_TESTS (((TEST_VQ_MAX - SVE_VQ_MIN) + 1) * 4)
#define FLAG_TESTS 2 #define FLAG_TESTS 2
#define FPSIMD_TESTS 2 #define FPSIMD_TESTS 2
...@@ -689,7 +699,7 @@ static int do_parent(pid_t child) ...@@ -689,7 +699,7 @@ static int do_parent(pid_t child)
} }
/* Step through every possible VQ */ /* Step through every possible VQ */
for (vq = SVE_VQ_MIN; vq <= SVE_VQ_MAX; vq++) { for (vq = SVE_VQ_MIN; vq <= TEST_VQ_MAX; vq++) {
vl = sve_vl_from_vq(vq); vl = sve_vl_from_vq(vq);
/* First, try to set this vector length */ /* First, try to set this vector length */
......
...@@ -25,7 +25,17 @@ ...@@ -25,7 +25,17 @@
#define NT_ARM_ZA 0x40c #define NT_ARM_ZA 0x40c
#endif #endif
#define EXPECTED_TESTS (((SVE_VQ_MAX - SVE_VQ_MIN) + 1) * 3) /*
* The architecture defines the maximum VQ as 16 but for extensibility
* the kernel specifies the SVE_VQ_MAX as 512 resulting in us running
* a *lot* more tests than are useful if we use it. Until the
* architecture is extended let's limit our coverage to what is
* currently allowed, plus one extra to ensure we cover constraining
* the VL as expected.
*/
#define TEST_VQ_MAX 17
#define EXPECTED_TESTS (((TEST_VQ_MAX - SVE_VQ_MIN) + 1) * 3)
static void fill_buf(char *buf, size_t size) static void fill_buf(char *buf, size_t size)
{ {
...@@ -301,7 +311,7 @@ static int do_parent(pid_t child) ...@@ -301,7 +311,7 @@ static int do_parent(pid_t child)
ksft_print_msg("Parent is %d, child is %d\n", getpid(), child); ksft_print_msg("Parent is %d, child is %d\n", getpid(), child);
/* Step through every possible VQ */ /* Step through every possible VQ */
for (vq = SVE_VQ_MIN; vq <= SVE_VQ_MAX; vq++) { for (vq = SVE_VQ_MIN; vq <= TEST_VQ_MAX; vq++) {
vl = sve_vl_from_vq(vq); vl = sve_vl_from_vq(vq);
/* First, try to set this vector length */ /* First, try to set this vector length */
......
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