kselftest/arm64: Check that SVCR is 0 in signal handlers

We don't currently validate that we exit streaming mode and clear ZA when
we enter a signal handler. Add simple checks for this in the SSVE and ZA
tests.

Signed-off-by: Mark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20241106-arm64-fpmr-signal-test-v1-1-31fa34ce58fe@kernel.org
[catalin.marinas@arm.com: Use %lx in fprintf() as uint64_t seems to be unsigned long in glibc]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
This commit is contained in:
Mark Brown 2024-11-06 17:07:51 +00:00 committed by Catalin Marinas
parent 694e2803fe
commit 116e50d647
3 changed files with 23 additions and 0 deletions

View File

@ -18,4 +18,17 @@ extern unsigned int nvls;
int sve_fill_vls(bool use_sme, int min_vls);
static inline uint64_t get_svcr(void)
{
uint64_t val;
asm volatile (
"mrs %0, S3_3_C4_C2_2\n"
: "=r"(val)
:
: "cc");
return val;
}
#endif

View File

@ -85,6 +85,11 @@ static int do_one_sme_vl(struct tdescr *td, siginfo_t *si, ucontext_t *uc,
fprintf(stderr, "Got expected size %u and VL %d\n",
head->size, ssve->vl);
if (get_svcr() != 0) {
fprintf(stderr, "Unexpected SVCR %lx\n", get_svcr());
return 1;
}
return 0;
}

View File

@ -91,6 +91,11 @@ static int do_one_sme_vl(struct tdescr *td, siginfo_t *si, ucontext_t *uc,
return 1;
}
if (get_svcr() != 0) {
fprintf(stderr, "Unexpected SVCR %lx\n", get_svcr());
return 1;
}
return 0;
}