Re: [PATCH 2/6] KVM: arm64: Add KVM_PGTABLE_S2_AS_S1 flag

Fuad Tabba
2026-01-22T15:09:09Z

On Mon, 19 Jan 2026 at 10:56, Marc Zyngier <maz@kernel.org> wrote:
>
> Plumb the MT_S2{,_FWB}_AS_S1 memory types into the KVM_S2_MEMATTR()
> macro with a new KVM_PGTABLE_S2_AS_S1 flag.
>
> Nobody selects it yet.
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> ---
> arch/arm64/include/asm/kvm_pgtable.h | 2 ++
> arch/arm64/kvm/hyp/pgtable.c | 13 ++++++++++++-
> 2 files changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/include/asm/kvm_pgtable.h b/arch/arm64/include/asm/kvm_pgtable.h
> index fc02de43c68dd..9ce51a637da0a 100644
> --- a/arch/arm64/include/asm/kvm_pgtable.h
> +++ b/arch/arm64/include/asm/kvm_pgtable.h
> @@ -232,10 +232,12 @@ struct kvm_pgtable_mm_ops {
> * @KVM_PGTABLE_S2_NOFWB: Don't enforce Normal-WB even if the CPUs have
> * ARM64_HAS_STAGE2_FWB.
> * @KVM_PGTABLE_S2_IDMAP: Only use identity mappings.
> + * @KVM_PGTABLE_S2_AS_S1: Final memory attributes are that of Stage-1.
> */
> enum kvm_pgtable_stage2_flags {
> KVM_PGTABLE_S2_NOFWB = BIT(0),
> KVM_PGTABLE_S2_IDMAP = BIT(1),
> + KVM_PGTABLE_S2_AS_S1 = BIT(2),
> };
>
> /**
> diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
> index 947ac1a951a5b..3c5f399b1b986 100644
> --- a/arch/arm64/kvm/hyp/pgtable.c
> +++ b/arch/arm64/kvm/hyp/pgtable.c
> @@ -659,7 +659,18 @@ void kvm_tlb_flush_vmid_range(struct kvm_s2_mmu *mmu,
> }
> }
>
> -#define KVM_S2_MEMATTR(pgt, attr) PAGE_S2_MEMATTR(attr, stage2_has_fwb(pgt))
> +#define KVM_S2_MEMATTR(pgt, attr) \
> + ({ \
> + kvm_pte_t __attr; \

nit: new line?

Reviewed-by: Fuad Tabba <tabba@google.com>

Cheers,
/fuad

> + if((pgt)->flags & KVM_PGTABLE_S2_AS_S1) \
> + __attr = PAGE_S2_MEMATTR(AS_S1, \
> + stage2_has_fwb(pgt)); \
> + else \
> + __attr = PAGE_S2_MEMATTR(attr, \
> + stage2_has_fwb(pgt)); \
> + \
> + __attr; \
> + })
>
> static int stage2_set_xn_attr(enum kvm_pgtable_prot prot, kvm_pte_t *attr)
> {
> --
> 2.47.3
>