aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorMarc Zyngier <maz@kernel.org>2025-02-20 13:49:05 +0000
committerOliver Upton <oliver.upton@linux.dev>2025-02-24 11:33:34 -0800
commit8b0b98ebf34d6e6ad68a27109f78f2e153187737 (patch)
treef10db93c640eaff096a78f537f7da0b48dac2aa1
parentKVM: arm64: Make ID_AA64MMFR4_EL1.NV_frac writable (diff)
downloadwireguard-linux-8b0b98ebf34d6e6ad68a27109f78f2e153187737.tar.xz
wireguard-linux-8b0b98ebf34d6e6ad68a27109f78f2e153187737.zip
KVM: arm64: Advertise FEAT_ECV when possible
We can advertise support for FEAT_ECV if supported on the HW as long as we limit it to the basic trap bits, and not advertise CNTPOFF_EL2 support, even if the host has it (the short story being that CNTPOFF_EL2 is not virtualisable). Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Joey Gouly <joey.gouly@arm.com> Link: https://lore.kernel.org/r/20250220134907.554085-13-maz@kernel.org Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
-rw-r--r--arch/arm64/kvm/nested.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
index 933dc3acac5f..d55c296fcb27 100644
--- a/arch/arm64/kvm/nested.c
+++ b/arch/arm64/kvm/nested.c
@@ -848,14 +848,16 @@ u64 limit_nv_id_reg(struct kvm *kvm, u32 reg, u64 val)
break;
case SYS_ID_AA64MMFR0_EL1:
- /* Hide ECV, ExS, Secure Memory */
- val &= ~(ID_AA64MMFR0_EL1_ECV |
- ID_AA64MMFR0_EL1_EXS |
+ /* Hide ExS, Secure Memory */
+ val &= ~(ID_AA64MMFR0_EL1_EXS |
ID_AA64MMFR0_EL1_TGRAN4_2 |
ID_AA64MMFR0_EL1_TGRAN16_2 |
ID_AA64MMFR0_EL1_TGRAN64_2 |
ID_AA64MMFR0_EL1_SNSMEM);
+ /* Hide CNTPOFF if present */
+ val = ID_REG_LIMIT_FIELD_ENUM(val, ID_AA64MMFR0_EL1, ECV, IMP);
+
/* Disallow unsupported S2 page sizes */
switch (PAGE_SIZE) {
case SZ_64K: