]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: arm64: Add KVM_PGTABLE_S2_AS_S1 flag
authorMarc Zyngier <maz@kernel.org>
Fri, 23 Jan 2026 19:16:34 +0000 (19:16 +0000)
committerMarc Zyngier <maz@kernel.org>
Sun, 25 Jan 2026 16:17:21 +0000 (16:17 +0000)
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.

Reviewed-by: Joey Gouly <joey.gouly@arm.com>
Reviewed-by: Fuad Tabba <tabba@google.com>
Tested-by: Fuad Tabba <tabba@google.com>
Link: https://patch.msgid.link/20260123191637.715429-3-maz@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/include/asm/kvm_pgtable.h
arch/arm64/kvm/hyp/pgtable.c

index fc02de43c68dd88b9beb8bd7a758af614328a958..9ce51a637da0aebbd234e8d99a13a093caf82736 100644 (file)
@@ -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),
 };
 
 /**
index 947ac1a951a5b0f1c9b44339d69f7074cbfbd0a4..c52a24c15ff284d21fd8b70bcedca23795d87f69 100644 (file)
@@ -659,7 +659,19 @@ 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;                                       \
+                                                                       \
+               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)
 {