kselftest/arm64: fp-ptrace: Adjust to new VL change behaviour

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>
This commit is contained in:
Mark Rutland
2025-05-08 14:26:43 +01:00
committed by Will Deacon
parent be45e63f79
commit 031a2acaa1

View 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));