| From broonie@kernel.org Fri Apr 4 15:27:48 2025 |
| From: Mark Brown <broonie@kernel.org> |
| Date: Fri, 04 Apr 2025 14:23:39 +0100 |
| Subject: KVM: arm64: Remove host FPSIMD saving for non-protected KVM |
| To: Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>, Suzuki K Poulose <suzuki.poulose@arm.com>, Oliver Upton <oliver.upton@linux.dev>, Oleg Nesterov <oleg@redhat.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, kvmarm@lists.linux.dev, kvmarm@lists.cs.columbia.edu, Mark Brown <broonie@kernel.org>, stable@vger.kernel.org, Mark Rutland <mark.rutland@arm.com>, Fuad Tabba <tabba@google.com> |
| Message-ID: <20250404-stable-sve-6-1-v1-6-cd5c9eb52d49@kernel.org> |
| |
| From: Mark Rutland <mark.rutland@arm.com> |
| |
| [ Upstream commit 8eca7f6d5100b6997df4f532090bc3f7e0203bef ] |
| |
| Now that the host eagerly saves its own FPSIMD/SVE/SME state, |
| non-protected KVM never needs to save the host FPSIMD/SVE/SME state, |
| and the code to do this is never used. Protected KVM still needs to |
| save/restore the host FPSIMD/SVE state to avoid leaking guest state to |
| the host (and to avoid revealing to the host whether the guest used |
| FPSIMD/SVE/SME), and that code needs to be retained. |
| |
| Remove the unused code and data structures. |
| |
| To avoid the need for a stub copy of kvm_hyp_save_fpsimd_host() in the |
| VHE hyp code, the nVHE/hVHE version is moved into the shared switch |
| header, where it is only invoked when KVM is in protected mode. |
| |
| Signed-off-by: Mark Rutland <mark.rutland@arm.com> |
| Reviewed-by: Mark Brown <broonie@kernel.org> |
| Tested-by: Mark Brown <broonie@kernel.org> |
| Acked-by: Will Deacon <will@kernel.org> |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Fuad Tabba <tabba@google.com> |
| Cc: Marc Zyngier <maz@kernel.org> |
| Cc: Oliver Upton <oliver.upton@linux.dev> |
| Reviewed-by: Oliver Upton <oliver.upton@linux.dev> |
| Link: https://lore.kernel.org/r/20250210195226.1215254-3-mark.rutland@arm.com |
| Signed-off-by: Marc Zyngier <maz@kernel.org> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/arm64/include/asm/kvm_host.h | 1 - |
| arch/arm64/kvm/fpsimd.c | 2 -- |
| arch/arm64/kvm/hyp/include/hyp/switch.h | 4 ---- |
| 3 files changed, 7 deletions(-) |
| |
| --- a/arch/arm64/include/asm/kvm_host.h |
| +++ b/arch/arm64/include/asm/kvm_host.h |
| @@ -380,7 +380,6 @@ struct kvm_vcpu_arch { |
| struct kvm_guest_debug_arch vcpu_debug_state; |
| struct kvm_guest_debug_arch external_debug_state; |
| |
| - struct user_fpsimd_state *host_fpsimd_state; /* hyp VA */ |
| struct task_struct *parent_task; |
| |
| struct { |
| --- a/arch/arm64/kvm/fpsimd.c |
| +++ b/arch/arm64/kvm/fpsimd.c |
| @@ -49,8 +49,6 @@ int kvm_arch_vcpu_run_map_fp(struct kvm_ |
| if (ret) |
| return ret; |
| |
| - vcpu->arch.host_fpsimd_state = kern_hyp_va(fpsimd); |
| - |
| /* |
| * We need to keep current's task_struct pinned until its data has been |
| * unshared with the hypervisor to make sure it is not re-used by the |
| --- a/arch/arm64/kvm/hyp/include/hyp/switch.h |
| +++ b/arch/arm64/kvm/hyp/include/hyp/switch.h |
| @@ -207,10 +207,6 @@ static bool kvm_hyp_handle_fpsimd(struct |
| } |
| isb(); |
| |
| - /* Write out the host state if it's in the registers */ |
| - if (vcpu->arch.fp_state == FP_STATE_HOST_OWNED) |
| - __fpsimd_save_state(vcpu->arch.host_fpsimd_state); |
| - |
| /* Restore the guest state */ |
| if (sve_guest) |
| __hyp_sve_restore_guest(vcpu); |