Commit df07443f authored by Mark Brown's avatar Mark Brown Committed by Will Deacon
Browse files

arm64/signal: Clean up SVE/SME feature checking inconsistency



Currently when restoring signal state we check to see if SVE is supported
in restore_sigframe() but check to see if SVE is supported inside
restore_sve_fpsimd_context(). This makes no real difference since SVE is
always supported in systems with SME but looks a bit untidy and makes
things slightly harder to follow, move the SVE check next to the SME one
in restore_sve_fpsimd_context().

Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20220624172108.555000-1-broonie@kernel.org


Signed-off-by: default avatarWill Deacon <will@kernel.org>
parent d69d5649
Loading
Loading
Loading
Loading
+12 −8
Original line number Diff line number Diff line
@@ -280,6 +280,9 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)

		vl = task_get_sme_vl(current);
	} else {
		if (!system_supports_sve())
			return -EINVAL;

		vl = task_get_sve_vl(current);
	}

@@ -342,9 +345,14 @@ static int restore_sve_fpsimd_context(struct user_ctxs *user)

#else /* ! CONFIG_ARM64_SVE */

/* Turn any non-optimised out attempts to use these into a link error: */
static int restore_sve_fpsimd_context(struct user_ctxs *user)
{
	WARN_ON_ONCE(1);
	return -EINVAL;
}

/* Turn any non-optimised out attempts to use this into a link error: */
extern int preserve_sve_context(void __user *ctx);
extern int restore_sve_fpsimd_context(struct user_ctxs *user);

#endif /* ! CONFIG_ARM64_SVE */

@@ -649,15 +657,11 @@ static int restore_sigframe(struct pt_regs *regs,
		if (!user.fpsimd)
			return -EINVAL;

		if (user.sve) {
			if (!system_supports_sve())
				return -EINVAL;

		if (user.sve)
			err = restore_sve_fpsimd_context(&user);
		} else {
		else
			err = restore_fpsimd_context(user.fpsimd);
	}
	}

	if (err == 0 && system_supports_sme() && user.za)
		err = restore_za_context(&user);