stage2_try_set_pte() and KVM_PTE_LEAF_ATTR_LO_S2_AF are needed to
implement kvm_arch_test_clear_young().

Signed-off-by: Yu Zhao <yuz...@google.com>
---
 arch/arm64/include/asm/kvm_pgtable.h | 53 ++++++++++++++++++++++++++++
 arch/arm64/kvm/hyp/pgtable.c         | 53 ----------------------------
 2 files changed, 53 insertions(+), 53 deletions(-)

diff --git a/arch/arm64/include/asm/kvm_pgtable.h 
b/arch/arm64/include/asm/kvm_pgtable.h
index dc3c072e862f..ff520598b62c 100644
--- a/arch/arm64/include/asm/kvm_pgtable.h
+++ b/arch/arm64/include/asm/kvm_pgtable.h
@@ -44,6 +44,49 @@ typedef u64 kvm_pte_t;
 
 #define KVM_PHYS_INVALID               (-1ULL)
 
+#define KVM_PTE_TYPE                   BIT(1)
+#define KVM_PTE_TYPE_BLOCK             0
+#define KVM_PTE_TYPE_PAGE              1
+#define KVM_PTE_TYPE_TABLE             1
+
+#define KVM_PTE_LEAF_ATTR_LO           GENMASK(11, 2)
+
+#define KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX        GENMASK(4, 2)
+#define KVM_PTE_LEAF_ATTR_LO_S1_AP     GENMASK(7, 6)
+#define KVM_PTE_LEAF_ATTR_LO_S1_AP_RO  3
+#define KVM_PTE_LEAF_ATTR_LO_S1_AP_RW  1
+#define KVM_PTE_LEAF_ATTR_LO_S1_SH     GENMASK(9, 8)
+#define KVM_PTE_LEAF_ATTR_LO_S1_SH_IS  3
+#define KVM_PTE_LEAF_ATTR_LO_S1_AF     BIT(10)
+
+#define KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR        GENMASK(5, 2)
+#define KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R BIT(6)
+#define KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W BIT(7)
+#define KVM_PTE_LEAF_ATTR_LO_S2_SH     GENMASK(9, 8)
+#define KVM_PTE_LEAF_ATTR_LO_S2_SH_IS  3
+#define KVM_PTE_LEAF_ATTR_LO_S2_AF     BIT(10)
+
+#define KVM_PTE_LEAF_ATTR_HI           GENMASK(63, 51)
+
+#define KVM_PTE_LEAF_ATTR_HI_SW                GENMASK(58, 55)
+
+#define KVM_PTE_LEAF_ATTR_HI_S1_XN     BIT(54)
+
+#define KVM_PTE_LEAF_ATTR_HI_S2_XN     BIT(54)
+
+#define KVM_PTE_LEAF_ATTR_S2_PERMS     (KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R | \
+                                        KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W | \
+                                        KVM_PTE_LEAF_ATTR_HI_S2_XN)
+
+#define KVM_INVALID_PTE_OWNER_MASK     GENMASK(9, 2)
+#define KVM_MAX_OWNER_ID               1
+
+/*
+ * Used to indicate a pte for which a 'break-before-make' sequence is in
+ * progress.
+ */
+#define KVM_INVALID_PTE_LOCKED         BIT(10)
+
 static inline bool kvm_pte_valid(kvm_pte_t pte)
 {
        return pte & KVM_PTE_VALID;
@@ -224,6 +267,16 @@ static inline bool kvm_pgtable_walk_shared(const struct 
kvm_pgtable_visit_ctx *c
        return ctx->flags & KVM_PGTABLE_WALK_SHARED;
 }
 
+static inline bool stage2_try_set_pte(const struct kvm_pgtable_visit_ctx *ctx, 
kvm_pte_t new)
+{
+       if (!kvm_pgtable_walk_shared(ctx)) {
+               WRITE_ONCE(*ctx->ptep, new);
+               return true;
+       }
+
+       return cmpxchg(ctx->ptep, ctx->old, new) == ctx->old;
+}
+
 /**
  * struct kvm_pgtable_walker - Hook into a page-table walk.
  * @cb:                Callback function to invoke during the walk.
diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
index 5282cb9ca4cf..24678ccba76a 100644
--- a/arch/arm64/kvm/hyp/pgtable.c
+++ b/arch/arm64/kvm/hyp/pgtable.c
@@ -12,49 +12,6 @@
 #include <asm/stage2_pgtable.h>
 
 
-#define KVM_PTE_TYPE                   BIT(1)
-#define KVM_PTE_TYPE_BLOCK             0
-#define KVM_PTE_TYPE_PAGE              1
-#define KVM_PTE_TYPE_TABLE             1
-
-#define KVM_PTE_LEAF_ATTR_LO           GENMASK(11, 2)
-
-#define KVM_PTE_LEAF_ATTR_LO_S1_ATTRIDX        GENMASK(4, 2)
-#define KVM_PTE_LEAF_ATTR_LO_S1_AP     GENMASK(7, 6)
-#define KVM_PTE_LEAF_ATTR_LO_S1_AP_RO  3
-#define KVM_PTE_LEAF_ATTR_LO_S1_AP_RW  1
-#define KVM_PTE_LEAF_ATTR_LO_S1_SH     GENMASK(9, 8)
-#define KVM_PTE_LEAF_ATTR_LO_S1_SH_IS  3
-#define KVM_PTE_LEAF_ATTR_LO_S1_AF     BIT(10)
-
-#define KVM_PTE_LEAF_ATTR_LO_S2_MEMATTR        GENMASK(5, 2)
-#define KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R BIT(6)
-#define KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W BIT(7)
-#define KVM_PTE_LEAF_ATTR_LO_S2_SH     GENMASK(9, 8)
-#define KVM_PTE_LEAF_ATTR_LO_S2_SH_IS  3
-#define KVM_PTE_LEAF_ATTR_LO_S2_AF     BIT(10)
-
-#define KVM_PTE_LEAF_ATTR_HI           GENMASK(63, 51)
-
-#define KVM_PTE_LEAF_ATTR_HI_SW                GENMASK(58, 55)
-
-#define KVM_PTE_LEAF_ATTR_HI_S1_XN     BIT(54)
-
-#define KVM_PTE_LEAF_ATTR_HI_S2_XN     BIT(54)
-
-#define KVM_PTE_LEAF_ATTR_S2_PERMS     (KVM_PTE_LEAF_ATTR_LO_S2_S2AP_R | \
-                                        KVM_PTE_LEAF_ATTR_LO_S2_S2AP_W | \
-                                        KVM_PTE_LEAF_ATTR_HI_S2_XN)
-
-#define KVM_INVALID_PTE_OWNER_MASK     GENMASK(9, 2)
-#define KVM_MAX_OWNER_ID               1
-
-/*
- * Used to indicate a pte for which a 'break-before-make' sequence is in
- * progress.
- */
-#define KVM_INVALID_PTE_LOCKED         BIT(10)
-
 struct kvm_pgtable_walk_data {
        struct kvm_pgtable_walker       *walker;
 
@@ -702,16 +659,6 @@ static bool stage2_pte_is_locked(kvm_pte_t pte)
        return !kvm_pte_valid(pte) && (pte & KVM_INVALID_PTE_LOCKED);
 }
 
-static bool stage2_try_set_pte(const struct kvm_pgtable_visit_ctx *ctx, 
kvm_pte_t new)
-{
-       if (!kvm_pgtable_walk_shared(ctx)) {
-               WRITE_ONCE(*ctx->ptep, new);
-               return true;
-       }
-
-       return cmpxchg(ctx->ptep, ctx->old, new) == ctx->old;
-}
-
 /**
  * stage2_try_break_pte() - Invalidates a pte according to the
  *                         'break-before-make' requirements of the
-- 
2.41.0.rc0.172.g3f132b7071-goog

Reply via email to