Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Mark Brown and committed by
Catalin Marinas
116e50d6 694e2803

+23
+13
tools/testing/selftests/arm64/signal/sve_helpers.h
··· 18 18 19 19 int sve_fill_vls(bool use_sme, int min_vls); 20 20 21 + static inline uint64_t get_svcr(void) 22 + { 23 + uint64_t val; 24 + 25 + asm volatile ( 26 + "mrs %0, S3_3_C4_C2_2\n" 27 + : "=r"(val) 28 + : 29 + : "cc"); 30 + 31 + return val; 32 + } 33 + 21 34 #endif
+5
tools/testing/selftests/arm64/signal/testcases/ssve_regs.c
··· 85 85 fprintf(stderr, "Got expected size %u and VL %d\n", 86 86 head->size, ssve->vl); 87 87 88 + if (get_svcr() != 0) { 89 + fprintf(stderr, "Unexpected SVCR %lx\n", get_svcr()); 90 + return 1; 91 + } 92 + 88 93 return 0; 89 94 } 90 95
+5
tools/testing/selftests/arm64/signal/testcases/za_regs.c
··· 91 91 return 1; 92 92 } 93 93 94 + if (get_svcr() != 0) { 95 + fprintf(stderr, "Unexpected SVCR %lx\n", get_svcr()); 96 + return 1; 97 + } 98 + 94 99 return 0; 95 100 } 96 101