{
        struct kvm_memory_slot *slot;
        unsigned long pfn = 0; /* silence GCC warning */
+       struct page *page = NULL;
        unsigned long hva;
        int pfnmap = 0;
        int tsize = BOOK3E_PAGESZ_4K;
 
        if (likely(!pfnmap)) {
                tsize_pages = 1UL << (tsize + 10 - PAGE_SHIFT);
-               pfn = gfn_to_pfn_memslot(slot, gfn);
+               pfn = __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, NULL, &page);
                if (is_error_noslot_pfn(pfn)) {
                        if (printk_ratelimit())
                                pr_err("%s: real page not found for gfn %lx\n",
                }
        }
        writable = kvmppc_e500_ref_setup(ref, gtlbe, pfn, wimg);
-       if (writable)
-               kvm_set_pfn_dirty(pfn);
 
        kvmppc_e500_setup_stlbe(&vcpu_e500->vcpu, gtlbe, tsize,
                                ref, gvaddr, stlbe);
        kvmppc_mmu_flush_icache(pfn);
 
 out:
-       /* Drop refcount on page, so that mmu notifiers can clear it */
-       kvm_release_pfn_clean(pfn);
+       kvm_release_faultin_page(kvm, page, !!ret, writable);
        spin_unlock(&kvm->mmu_lock);
        return ret;
 }