[PATCH 0/6] KVM: arm64: ... and FWB for all

Marc Zyngier
2026-01-19T10:56:57Z

[Yes, you can tell what I was listening to]

Today, running in protected mode puts the host under it's own S2 with
FWB=0, even if the rest of the guests are running with FWB=1. The
rationale for this special-casing of the host is that we want the
combined attributes to actually reflect the ones exposed by S1.

We therefore use NormalCacheable (which is the weakest memory type) as
the default attributes at S2 so that S1 can only strengthen the final
memory type.

But there is no reason why we cannot achieve the same effect with
FWB. We normally use FWB to enforce cacheable memory from S2,
irrespective of S1. But it is possible to configure the S2 attributes
as "pass-through", so that the S1 attributes are always used.

This small series implements that change, adding a flag that actually
describes what we are trying to do (instead of the NOFWB flag which is
pretty obscure), and fixes an interesting gotcha with CMOs.
Interestingly, CMOs never actually worked with NOFWB on an FWB-aware
platform...

Patches on top of 6.19-rc5.

Marc Zyngier (6):
arm64: Add MT_S2{,_FWB}_AS_S1 encodings
KVM: arm64: Add KVM_PGTABLE_S2_AS_S1 flag
KVM: arm64: Make stage2_pte_cacheable() return false when S2_AS_S1 is
set
KVM: arm64: Switch pKVM host S2 over to KVM_PGTABLE_S2_AS_S1
KVM: arm64: Kill KVM_PGTABLE_S2_NOFWB
KVM: arm64: Simplify PAGE_S2_MEMATTR

arch/arm64/include/asm/kvm_pgtable.h | 7 +++---
arch/arm64/include/asm/memory.h | 11 ++++++---
arch/arm64/include/asm/pgtable-prot.h | 4 ++--
arch/arm64/kvm/hyp/nvhe/mem_protect.c | 4 +++-
arch/arm64/kvm/hyp/pgtable.c | 32 +++++++++++++++++++--------
5 files changed, 39 insertions(+), 19 deletions(-)

--
2.47.3