| From 714f3cbd70a4db9f9b7fe5b8a032896ed33fb824 Mon Sep 17 00:00:00 2001 |
| From: Mark Brown <broonie@kernel.org> |
| Date: Wed, 17 Aug 2022 19:23:24 +0100 |
| Subject: arm64/sme: Don't flush SVE register state when handling SME traps |
| |
| From: Mark Brown <broonie@kernel.org> |
| |
| commit 714f3cbd70a4db9f9b7fe5b8a032896ed33fb824 upstream. |
| |
| Currently as part of handling a SME access trap we flush the SVE register |
| state. This is not needed and would corrupt register state if the task has |
| access to the SVE registers already. For non-streaming mode accesses the |
| required flushing will be done in the SVE access trap. For streaming |
| mode SVE register accesses the architecture guarantees that the register |
| state will be flushed when streaming mode is entered or exited so there is |
| no need for us to do so. Simply remove the register initialisation. |
| |
| Fixes: 8bd7f91c03d8 ("arm64/sme: Implement traps and syscall handling for SME") |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> |
| Link: https://lore.kernel.org/r/20220817182324.638214-5-broonie@kernel.org |
| Signed-off-by: Will Deacon <will@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/arm64/kernel/fpsimd.c | 11 ----------- |
| 1 file changed, 11 deletions(-) |
| |
| --- a/arch/arm64/kernel/fpsimd.c |
| +++ b/arch/arm64/kernel/fpsimd.c |
| @@ -1463,17 +1463,6 @@ void do_sme_acc(unsigned long esr, struc |
| fpsimd_bind_task_to_cpu(); |
| } |
| |
| - /* |
| - * If SVE was not already active initialise the SVE registers, |
| - * any non-shared state between the streaming and regular SVE |
| - * registers is architecturally guaranteed to be zeroed when |
| - * we enter streaming mode. We do not need to initialize ZA |
| - * since ZA must be disabled at this point and enabling ZA is |
| - * architecturally defined to zero ZA. |
| - */ |
| - if (system_supports_sve() && !test_thread_flag(TIF_SVE)) |
| - sve_init_regs(); |
| - |
| put_cpu_fpsimd_context(); |
| } |
| |