mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-03-01 14:52:13 -05:00
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:
committed by
Will Deacon
parent
be45e63f79
commit
031a2acaa1
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user