]> www.infradead.org Git - users/hch/misc.git/commitdiff
KVM: arm64: Advertise FEAT_ECV when possible
authorMarc Zyngier <maz@kernel.org>
Thu, 20 Feb 2025 13:49:05 +0000 (13:49 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Mon, 24 Feb 2025 19:33:34 +0000 (11:33 -0800)
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>
arch/arm64/kvm/nested.c

index 933dc3acac5fb71bd3ceff78084241677ada1135..d55c296fcb27adac4b515fecd4f9f68ff7939275 100644 (file)
@@ -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: