Re: [PATCH 6/6] KVM: arm64: Simplify PAGE_S2_MEMATTR

Will Deacon
2026-01-22T15:03:31Z

On Mon, Jan 19, 2026 at 10:56:51AM +0000, Marc Zyngier wrote:
> Restore PAGE_S2_MEMATTR() to its former glory, keeping the use of
> FWB as an implementation detail.
>
> Signed-off-by: Marc Zyngier <maz@kernel.org>
> ---
> arch/arm64/include/asm/pgtable-prot.h | 4 ++--
> arch/arm64/kvm/hyp/pgtable.c | 6 ++----
> 2 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm64/include/asm/pgtable-prot.h b/arch/arm64/include/asm/pgtable-prot.h
> index 161e8660edddc..d27e8872fe3c8 100644
> --- a/arch/arm64/include/asm/pgtable-prot.h
> +++ b/arch/arm64/include/asm/pgtable-prot.h
> @@ -109,10 +109,10 @@ static inline bool __pure lpa2_is_enabled(void)
> #define PAGE_KERNEL_EXEC __pgprot(_PAGE_KERNEL_EXEC)
> #define PAGE_KERNEL_EXEC_CONT __pgprot(_PAGE_KERNEL_EXEC_CONT)
>
> -#define PAGE_S2_MEMATTR(attr, has_fwb) \
> +#define PAGE_S2_MEMATTR(attr) \
> ({ \
> u64 __val; \
> - if (has_fwb) \
> + if (cpus_have_final_cap(ARM64_HAS_STAGE2_FWB)) \
> __val = PTE_S2_MEMATTR(MT_S2_FWB_ ## attr); \
> else \
> __val = PTE_S2_MEMATTR(MT_S2_ ## attr); \
> diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
> index 3c2f7967fdc03..34c9afa442932 100644
> --- a/arch/arm64/kvm/hyp/pgtable.c
> +++ b/arch/arm64/kvm/hyp/pgtable.c
> @@ -660,11 +660,9 @@ void kvm_tlb_flush_vmid_range(struct kvm_s2_mmu *mmu,
> ({ \
> kvm_pte_t __attr; \
> if((pgt)->flags & KVM_PGTABLE_S2_AS_S1) \
> - __attr = PAGE_S2_MEMATTR(AS_S1, \
> - stage2_has_fwb()); \
> + __attr = PAGE_S2_MEMATTR(AS_S1); \
> else \
> - __attr = PAGE_S2_MEMATTR(attr, \
> - stage2_has_fwb()); \
> + __attr = PAGE_S2_MEMATTR(attr); \
> \

tbh, I'd probably just kill stage2_has_fwb() entirely and use the cap
everywhere...

Up to you.

Will