From: <gregkh@linuxfoundation.org>
To: broonie@kernel.org,catalin.marinas@arm.com,gregkh@linuxfoundation.org,james.morse@arm.com,kvmarm@lists.cs.columbia.edu,linux-arm-kernel@lists.infradead.org,mark.rutland@arm.com,maz@kernel.org,oleg@redhat.com,oliver.upton@linux.dev,suzuki.poulose@arm.com,will@kernel.org
Cc: <stable-commits@vger.kernel.org>
Subject: Patch "KVM: arm64: Discard any SVE state when entering KVM guests" has been added to the 5.15-stable tree
Date: Tue, 22 Apr 2025 08:45:14 +0200 [thread overview]
Message-ID: <2025042214-laundry-landed-75f7@gregkh> (raw)
In-Reply-To: <20250408-stable-sve-5-15-v3-3-ca9a6b850f55@kernel.org>
This is a note to let you know that I've just added the patch titled
KVM: arm64: Discard any SVE state when entering KVM guests
to the 5.15-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-arm64-discard-any-sve-state-when-entering-kvm-guests.patch
and it can be found in the queue-5.15 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
From broonie@kernel.org Tue Apr 8 20:22:27 2025
From: Mark Brown <broonie@kernel.org>
Date: Tue, 08 Apr 2025 19:09:58 +0100
Subject: KVM: arm64: Discard any SVE state when entering KVM guests
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Marc Zyngier <maz@kernel.org>, James Morse <james.morse@arm.com>, Suzuki K Poulose <suzuki.poulose@arm.com>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will@kernel.org>, Oleg Nesterov <oleg@redhat.com>, Oliver Upton <oliver.upton@linux.dev>
Cc: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org, stable@vger.kernel.org, Mark Brown <broonie@kernel.org>, Mark Rutland <mark.rutland@arm.com>
Message-ID: <20250408-stable-sve-5-15-v3-3-ca9a6b850f55@kernel.org>
From: Mark Brown <broonie@kernel.org>
[ Upstream commit 93ae6b01bafee8fa385aa25ee7ebdb40057f6abe ]
Since 8383741ab2e773a99 (KVM: arm64: Get rid of host SVE tracking/saving)
KVM has not tracked the host SVE state, relying on the fact that we
currently disable SVE whenever we perform a syscall. This may not be true
in future since performance optimisation may result in us keeping SVE
enabled in order to avoid needing to take access traps to reenable it.
Handle this by clearing TIF_SVE and converting the stored task state to
FPSIMD format when preparing to run the guest. This is done with a new
call fpsimd_kvm_prepare() to keep the direct state manipulation
functions internal to fpsimd.c.
Signed-off-by: Mark Brown <broonie@kernel.org>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20221115094640.112848-2-broonie@kernel.org
Signed-off-by: Will Deacon <will@kernel.org>
[ Mark: trivial backport to v6.1 ]
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/arm64/include/asm/fpsimd.h | 1 +
arch/arm64/kernel/fpsimd.c | 23 +++++++++++++++++++++++
arch/arm64/kvm/fpsimd.c | 4 +++-
3 files changed, 27 insertions(+), 1 deletion(-)
--- a/arch/arm64/include/asm/fpsimd.h
+++ b/arch/arm64/include/asm/fpsimd.h
@@ -44,6 +44,7 @@ extern void fpsimd_signal_preserve_curre
extern void fpsimd_preserve_current_state(void);
extern void fpsimd_restore_current_state(void);
extern void fpsimd_update_current_state(struct user_fpsimd_state const *state);
+extern void fpsimd_kvm_prepare(void);
extern void fpsimd_bind_state_to_cpu(struct user_fpsimd_state *state,
void *sve_state, unsigned int sve_vl);
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@ -1109,6 +1109,29 @@ void fpsimd_signal_preserve_current_stat
}
/*
+ * Called by KVM when entering the guest.
+ */
+void fpsimd_kvm_prepare(void)
+{
+ if (!system_supports_sve())
+ return;
+
+ /*
+ * KVM does not save host SVE state since we can only enter
+ * the guest from a syscall so the ABI means that only the
+ * non-saved SVE state needs to be saved. If we have left
+ * SVE enabled for performance reasons then update the task
+ * state to be FPSIMD only.
+ */
+ get_cpu_fpsimd_context();
+
+ if (test_and_clear_thread_flag(TIF_SVE))
+ sve_to_fpsimd(current);
+
+ put_cpu_fpsimd_context();
+}
+
+/*
* Associate current's FPSIMD context with this cpu
* The caller must have ownership of the cpu FPSIMD context before calling
* this function.
--- a/arch/arm64/kvm/fpsimd.c
+++ b/arch/arm64/kvm/fpsimd.c
@@ -70,12 +70,14 @@ error:
void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
{
BUG_ON(!current->mm);
- BUG_ON(test_thread_flag(TIF_SVE));
vcpu->arch.flags &= ~KVM_ARM64_FP_ENABLED;
vcpu->arch.flags |= KVM_ARM64_FP_HOST;
+ fpsimd_kvm_prepare();
+
vcpu->arch.flags &= ~KVM_ARM64_HOST_SVE_ENABLED;
+
if (read_sysreg(cpacr_el1) & CPACR_EL1_ZEN_EL0EN)
vcpu->arch.flags |= KVM_ARM64_HOST_SVE_ENABLED;
}
Patches currently in stable-queue which might be from broonie@kernel.org are
queue-5.15/kvm-arm64-remove-host-fpsimd-saving-for-non-protected-kvm.patch
queue-5.15/spi-cadence-qspi-fix-probe-on-am62a-lp-sk.patch
queue-5.15/asoc-qdsp6-q6asm-dai-fix-q6asm_dai_compr_set_params-error-path.patch
queue-5.15/kvm-arm64-eagerly-switch-zcr_el-1-2.patch
queue-5.15/kvm-arm64-unconditionally-save-flush-host-fpsimd-sve-sme-state.patch
queue-5.15/kvm-arm64-always-start-with-clearing-sve-flag-on-load.patch
queue-5.15/asoc-codecs-lpass-wsa-macro-fix-vi-feedback-rate.patch
queue-5.15/arm64-fpsimd-track-the-saved-fpsimd-state-type-separately-to-tif_sve.patch
queue-5.15/kvm-arm64-get-rid-of-host-sve-tracking-saving.patch
queue-5.15/kvm-arm64-remove-vhe-host-restore-of-cpacr_el1.zen.patch
queue-5.15/asoc-fsl_audmix-register-card-device-depends-on-dais.patch
queue-5.15/arm64-fpsimd-have-kvm-explicitly-say-which-fp-registers-to-save.patch
queue-5.15/kvm-arm64-discard-any-sve-state-when-entering-kvm-guests.patch
queue-5.15/arm64-fpsimd-stop-using-tif_sve-to-manage-register-saving-in-kvm.patch
queue-5.15/asoc-codecs-lpass-wsa-macro-fix-logic-of-enabling-vi-channels.patch
queue-5.15/kvm-arm64-calculate-cptr_el2-traps-on-activating-traps.patch
next prev parent reply other threads:[~2025-04-22 7:29 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-08 18:09 [PATCH 5.15 v3 00/11] KVM: arm64: Backport of SVE fixes to v5.15 Mark Brown
2025-04-08 18:09 ` [PATCH 5.15 v3 01/11] KVM: arm64: Get rid of host SVE tracking/saving Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Get rid of host SVE tracking/saving" has been added to the 5.15-stable tree gregkh
2025-04-08 18:09 ` [PATCH 5.15 v3 02/11] KVM: arm64: Always start with clearing SVE flag on load Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Always start with clearing SVE flag on load" has been added to the 5.15-stable tree gregkh
2025-04-08 18:09 ` [PATCH 5.15 v3 03/11] KVM: arm64: Discard any SVE state when entering KVM guests Mark Brown
2025-04-22 6:45 ` gregkh [this message]
2025-04-08 18:09 ` [PATCH 5.15 v3 04/11] arm64/fpsimd: Track the saved FPSIMD state type separately to TIF_SVE Mark Brown
2025-04-22 6:45 ` Patch "arm64/fpsimd: Track the saved FPSIMD state type separately to TIF_SVE" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 05/11] arm64/fpsimd: Have KVM explicitly say which FP registers to save Mark Brown
2025-04-22 6:45 ` Patch "arm64/fpsimd: Have KVM explicitly say which FP registers to save" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 06/11] arm64/fpsimd: Stop using TIF_SVE to manage register saving in KVM Mark Brown
2025-04-22 6:45 ` Patch "arm64/fpsimd: Stop using TIF_SVE to manage register saving in KVM" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 07/11] KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 08/11] KVM: arm64: Remove host FPSIMD saving for non-protected KVM Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Remove host FPSIMD saving for non-protected KVM" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 09/11] KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Remove VHE host restore of CPACR_EL1.ZEN" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 10/11] KVM: arm64: Calculate cptr_el2 traps on activating traps Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Calculate cptr_el2 traps on activating traps" has been added to the 5.15-stable tree gregkh
2025-04-08 18:10 ` [PATCH 5.15 v3 11/11] KVM: arm64: Eagerly switch ZCR_EL{1,2} Mark Brown
2025-04-22 6:45 ` Patch "KVM: arm64: Eagerly switch ZCR_EL{1,2}" has been added to the 5.15-stable tree gregkh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2025042214-laundry-landed-75f7@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=broonie@kernel.org \
--cc=catalin.marinas@arm.com \
--cc=james.morse@arm.com \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=oleg@redhat.com \
--cc=oliver.upton@linux.dev \
--cc=stable-commits@vger.kernel.org \
--cc=suzuki.poulose@arm.com \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox