[PATCH v1 1/3] KVM: arm64: nv: Don't advertise FEAT_LPA2 for guest stage-1
Marc Zyngier
maz at kernel.org
Fri Sep 11 02:08:58 PDT 2026
On Wed, 09 Sep 2026 23:20:13 +0100,
Wei-Lin Chang <weilin.chang at arm.com> wrote:
>
> There is no FEAT_LPA2 support for NV guests as of now, but we missed
> limiting it for the non-stage-2 granule size fields (TGRAN4, TGRAN16) in
> ID_AA64MMFR0_EL1. Add the sanitisation.
>
> Signed-off-by: Wei-Lin Chang <weilin.chang at arm.com>
> ---
> arch/arm64/kvm/nested.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/arch/arm64/kvm/nested.c b/arch/arm64/kvm/nested.c
> index 3c4fc566eafc..1fd98117df23 100644
> --- a/arch/arm64/kvm/nested.c
> +++ b/arch/arm64/kvm/nested.c
> @@ -1731,6 +1731,19 @@ u64 limit_nv_id_reg(struct kvm *kvm, u32 reg, u64 val)
> /* Hide CNTPOFF if present */
> val = ID_REG_LIMIT_FIELD_ENUM(val, ID_AA64MMFR0_EL1, ECV, IMP);
>
> + /* NV does not support FEAT_LPA2. */
> + if (SYS_FIELD_GET(ID_AA64MMFR0_EL1, TGRAN4, val) ==
> + ID_AA64MMFR0_EL1_TGRAN4_52_BIT) {
nit: keep both sides of == on a single line.
> + val &= ~ID_AA64MMFR0_EL1_TGRAN4;
> + val |= SYS_FIELD_PREP_ENUM(ID_AA64MMFR0_EL1, TGRAN4, IMP);
> + }
> +
> + if (SYS_FIELD_GET(ID_AA64MMFR0_EL1, TGRAN16, val) ==
> + ID_AA64MMFR0_EL1_TGRAN16_52_BIT) {
> + val &= ~ID_AA64MMFR0_EL1_TGRAN16;
> + val |= SYS_FIELD_PREP_ENUM(ID_AA64MMFR0_EL1, TGRAN16, IMP);
> + }
> +
> /* Disallow unsupported S2 page sizes */
> switch (PAGE_SIZE) {
> case SZ_64K:
In theory, we should also change the userspace interface to accept
(but ignore) FEAT_LPA2 being set from userspace.
But since there is no LPA2 HW in the wild, I'm not too worried about
that. You probably want to Cc stable on this patch though.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
More information about the linux-arm-kernel
mailing list