Commit 031a2aca authored by Mark Rutland's avatar Mark Rutland Committed by Will Deacon
Browse files

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: default avatarMark 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: default avatarWill Deacon <will@kernel.org>
parent be45e63f
Loading
Loading
Loading
Loading
+3 −15
Original line number Diff line number Diff line
@@ -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)) {
	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));