]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
kselftest/arm64: fp-ptrace: Adjust to new VL change behaviour
authorMark Rutland <mark.rutland@arm.com>
Thu, 8 May 2025 13:26:43 +0000 (14:26 +0100)
committerWill Deacon <will@kernel.org>
Thu, 8 May 2025 14:45:24 +0000 (15:45 +0100)
In order to fix an ABI problem, we recently changed the way that
changing the SVE/SME vector length affects PSTATE.SM. Historically,
changing the SME vector length would clear PSTATE.SM. Now, changing the
SME vector length preserves PSTATE.SM.

Update the fp-ptrace test for the new behaviour.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: David Spickett <david.spickett@arm.com>
Cc: Luis Machado <luis.machado@arm.com>
Cc: Marc Zyngier <maz@kernel.org>
Cc: Mark Brown <broonie@kernel.org>
Cc: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20250508132644.1395904-24-mark.rutland@arm.com
Signed-off-by: Will Deacon <will@kernel.org>
tools/testing/selftests/arm64/fp/fp-ptrace.c

index 762048eb354ffe5b8ce43400d21ebe56b676d78a..c2882a5a5cc0aa912a7780b14b1e8914b0c62d31 100644 (file)
@@ -1183,18 +1183,8 @@ static void sve_write(pid_t child, struct test_config *config)
 
 static bool za_write_supported(struct test_config *config)
 {
-       if (config->sme_vl_in != config->sme_vl_expected) {
-               /* Changing the SME VL exits streaming mode. */
-               if (config->svcr_expected & SVCR_SM) {
-                       return false;
-               }
-       } else {
-               /* Otherwise we can't change streaming mode */
-               if ((config->svcr_in & SVCR_SM) !=
-                   (config->svcr_expected & SVCR_SM)) {
-                       return false;
-               }
-       }
+       if ((config->svcr_in & SVCR_SM) != (config->svcr_expected & SVCR_SM))
+               return false;
 
        return true;
 }
@@ -1212,10 +1202,8 @@ static void za_write_expected(struct test_config *config)
                memset(zt_expected, 0, sizeof(zt_expected));
        }
 
-       /* Changing the SME VL flushes ZT, SVE state and exits SM */
+       /* Changing the SME VL flushes ZT, SVE state */
        if (config->sme_vl_in != config->sme_vl_expected) {
-               svcr_expected &= ~SVCR_SM;
-
                sve_vq = __sve_vq_from_vl(vl_expected(config));
                memset(z_expected, 0, __SVE_ZREGS_SIZE(sve_vq));
                memset(p_expected, 0, __SVE_PREGS_SIZE(sve_vq));