From: David Stevens <steve...@chromium.org>

Migrate from __gfn_to_pfn_memslot to __kvm_follow_pfn.

Signed-off-by: David Stevens <steve...@chromium.org>
---
 arch/arm64/kvm/mmu.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index 6db9ef288ec3..c706530d304d 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -1334,7 +1334,8 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
                          unsigned long fault_status)
 {
        int ret = 0;
-       bool write_fault, writable, force_pte = false;
+       bool write_fault = kvm_is_write_fault(vcpu);
+       bool force_pte = false;
        bool exec_fault, mte_allowed;
        bool device = false;
        unsigned long mmu_seq;
@@ -1342,16 +1343,19 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
        struct kvm_mmu_memory_cache *memcache = &vcpu->arch.mmu_page_cache;
        struct vm_area_struct *vma;
        short vma_shift;
-       gfn_t gfn;
        kvm_pfn_t pfn;
        bool logging_active = memslot_is_logging(memslot);
        unsigned long fault_level = kvm_vcpu_trap_get_fault_level(vcpu);
        long vma_pagesize, fault_granule;
        enum kvm_pgtable_prot prot = KVM_PGTABLE_PROT_R;
        struct kvm_pgtable *pgt;
+       struct kvm_follow_pfn foll = {
+               .slot = memslot,
+               .flags = FOLL_GET | (write_fault ? FOLL_WRITE : 0),
+               .allow_write_mapping = true,
+       };
 
        fault_granule = 1UL << ARM64_HW_PGTABLE_LEVEL_SHIFT(fault_level);
-       write_fault = kvm_is_write_fault(vcpu);
        exec_fault = kvm_vcpu_trap_is_exec_fault(vcpu);
        VM_BUG_ON(write_fault && exec_fault);
 
@@ -1425,7 +1429,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
        if (vma_pagesize == PMD_SIZE || vma_pagesize == PUD_SIZE)
                fault_ipa &= ~(vma_pagesize - 1);
 
-       gfn = fault_ipa >> PAGE_SHIFT;
+       foll.gfn = fault_ipa >> PAGE_SHIFT;
        mte_allowed = kvm_vma_mte_allowed(vma);
 
        /* Don't use the VMA after the unlock -- it may have vanished */
@@ -1433,7 +1437,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
 
        /*
         * Read mmu_invalidate_seq so that KVM can detect if the results of
-        * vma_lookup() or __gfn_to_pfn_memslot() become stale prior to
+        * vma_lookup() or __kvm_follow_pfn() become stale prior to
         * acquiring kvm->mmu_lock.
         *
         * Rely on mmap_read_unlock() for an implicit smp_rmb(), which pairs
@@ -1442,8 +1446,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
        mmu_seq = vcpu->kvm->mmu_invalidate_seq;
        mmap_read_unlock(current->mm);
 
-       pfn = __gfn_to_pfn_memslot(memslot, gfn, false, false, NULL,
-                                  write_fault, &writable, NULL);
+       pfn = __kvm_follow_pfn(&foll);
        if (pfn == KVM_PFN_ERR_HWPOISON) {
                kvm_send_hwpoison_signal(hva, vma_shift);
                return 0;
@@ -1468,7 +1471,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
                 * Only actually map the page as writable if this was a write
                 * fault.
                 */
-               writable = false;
+               foll.writable = false;
        }
 
        if (exec_fault && device)
@@ -1508,7 +1511,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
                }
        }
 
-       if (writable)
+       if (foll.writable)
                prot |= KVM_PGTABLE_PROT_W;
 
        if (exec_fault)
@@ -1534,9 +1537,9 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, 
phys_addr_t fault_ipa,
                                             KVM_PGTABLE_WALK_SHARED);
 
        /* Mark the page dirty only if the fault is handled successfully */
-       if (writable && !ret) {
+       if (foll.writable && !ret) {
                kvm_set_pfn_dirty(pfn);
-               mark_page_dirty_in_slot(kvm, memslot, gfn);
+               mark_page_dirty_in_slot(kvm, memslot, foll.gfn);
        }
 
 out_unlock:
-- 
2.41.0.255.g8b1d071c50-goog

Reply via email to