]> www.infradead.org Git - users/hch/block.git/commitdiff
KVM: arm/arm64: Consolidate page-table accessors
authorMarc Zyngier <marc.zyngier@arm.com>
Fri, 25 May 2018 11:23:11 +0000 (12:23 +0100)
committerMarc Zyngier <marc.zyngier@arm.com>
Mon, 9 Jul 2018 10:37:42 +0000 (11:37 +0100)
The arm and arm64 KVM page tables accessors are pointlessly different
between the two architectures, and likely both wrong one way or another:
arm64 lacks a dsb(), and arm doesn't use WRITE_ONCE.

Let's unify them.

Acked-by: Mark Rutland <mark.rutland@arm.com>
Acked-by: Christoffer Dall <christoffer.dall@arm.com>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
arch/arm/include/asm/kvm_mmu.h
arch/arm64/include/asm/kvm_mmu.h
virt/kvm/arm/mmu.c

index 8553d68b7c8a2ac34ec7b22daa44400c1c3b5958..b2feaea1434c9f33d96a8443bccc3c60ceda4af5 100644 (file)
@@ -75,18 +75,6 @@ phys_addr_t kvm_get_idmap_vector(void);
 int kvm_mmu_init(void);
 void kvm_clear_hyp_idmap(void);
 
-static inline void kvm_set_pmd(pmd_t *pmd, pmd_t new_pmd)
-{
-       *pmd = new_pmd;
-       dsb(ishst);
-}
-
-static inline void kvm_set_pte(pte_t *pte, pte_t new_pte)
-{
-       *pte = new_pte;
-       dsb(ishst);
-}
-
 static inline pte_t kvm_s2pte_mkwrite(pte_t pte)
 {
        pte_val(pte) |= L_PTE_S2_RDWR;
index bac9f016736b2842a156c5189d73c34710f6e362..ea000fb47ec0e45a4864e4fef29b89008da516f3 100644 (file)
@@ -169,9 +169,6 @@ phys_addr_t kvm_get_idmap_vector(void);
 int kvm_mmu_init(void);
 void kvm_clear_hyp_idmap(void);
 
-#define        kvm_set_pte(ptep, pte)          set_pte(ptep, pte)
-#define        kvm_set_pmd(pmdp, pmd)          set_pmd(pmdp, pmd)
-
 static inline pte_t kvm_s2pte_mkwrite(pte_t pte)
 {
        pte_val(pte) |= PTE_S2_RDWR;
index ea7314296ad1164c710c1e247f5142f2ca91872e..a6bdbed1903a77c783ccae2b1546f61fbb67c633 100644 (file)
@@ -177,6 +177,18 @@ static void clear_stage2_pmd_entry(struct kvm *kvm, pmd_t *pmd, phys_addr_t addr
        put_page(virt_to_page(pmd));
 }
 
+static inline void kvm_set_pte(pte_t *ptep, pte_t new_pte)
+{
+       WRITE_ONCE(*ptep, new_pte);
+       dsb(ishst);
+}
+
+static inline void kvm_set_pmd(pmd_t *pmdp, pmd_t new_pmd)
+{
+       WRITE_ONCE(*pmdp, new_pmd);
+       dsb(ishst);
+}
+
 /*
  * Unmapping vs dcache management:
  *