mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 05:32:00 +00:00
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:
parent
694e2803fe
commit
116e50d647
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user