KVM: arm64: Don't serialize if the access flag isn't set
authorOliver Upton <oliver.upton@linux.dev>
Fri, 2 Dec 2022 18:51:54 +0000 (18:51 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Thu, 12 Jan 2023 21:09:20 +0000 (21:09 +0000)
Of course, if the PTE wasn't changed then there are absolutely no
serialization requirements. Skip the DSB for an unsuccessful update to
the access flag.

Link: https://lore.kernel.org/r/20221202185156.696189-5-oliver.upton@linux.dev
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
arch/arm64/kvm/hyp/pgtable.c

index 204e59e..aa36d89 100644 (file)
@@ -1116,10 +1116,14 @@ int kvm_pgtable_stage2_wrprotect(struct kvm_pgtable *pgt, u64 addr, u64 size)
 kvm_pte_t kvm_pgtable_stage2_mkyoung(struct kvm_pgtable *pgt, u64 addr)
 {
        kvm_pte_t pte = 0;
-       stage2_update_leaf_attrs(pgt, addr, 1, KVM_PTE_LEAF_ATTR_LO_S2_AF, 0,
-                                &pte, NULL,
-                                KVM_PGTABLE_WALK_HANDLE_FAULT);
-       dsb(ishst);
+       int ret;
+
+       ret = stage2_update_leaf_attrs(pgt, addr, 1, KVM_PTE_LEAF_ATTR_LO_S2_AF, 0,
+                                      &pte, NULL,
+                                      KVM_PGTABLE_WALK_HANDLE_FAULT);
+       if (!ret)
+               dsb(ishst);
+
        return pte;
 }