| From 7dde62f0687c8856b6c0660066c7ee83a6a6f033 Mon Sep 17 00:00:00 2001 |
| From: Mark Brown <broonie@kernel.org> |
| Date: Tue, 27 Dec 2022 17:12:05 +0000 |
| Subject: arm64/signal: Always accept SVE signal frames on SME only systems |
| |
| From: Mark Brown <broonie@kernel.org> |
| |
| commit 7dde62f0687c8856b6c0660066c7ee83a6a6f033 upstream. |
| |
| Currently we reject an attempt to restore a SVE signal frame on a system |
| with SME but not SVE supported. This means that it is not possible to |
| disable streaming mode via signal return as this is configured via the |
| flags in the SVE signal context. Instead accept the signal frame, we will |
| require it to have a vector length of 0 specified and no payload since the |
| task will have no SVE vector length configured. |
| |
| Fixes: 85ed24dad290 ("arm64/sme: Implement streaming SVE signal handling") |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Link: https://lore.kernel.org/r/20221223-arm64-fix-sme-only-v1-2-938d663f69e5@kernel.org |
| Signed-off-by: Will Deacon <will@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/arm64/kernel/signal.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| --- a/arch/arm64/kernel/signal.c |
| +++ b/arch/arm64/kernel/signal.c |
| @@ -280,7 +280,12 @@ static int restore_sve_fpsimd_context(st |
| |
| vl = task_get_sme_vl(current); |
| } else { |
| - if (!system_supports_sve()) |
| + /* |
| + * A SME only system use SVE for streaming mode so can |
| + * have a SVE formatted context with a zero VL and no |
| + * payload data. |
| + */ |
| + if (!system_supports_sve() && !system_supports_sme()) |
| return -EINVAL; |
| |
| vl = task_get_sve_vl(current); |