]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
Revert "KVM: PPC: e500: Use __kvm_faultin_pfn() to handle page faults"
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 10 Mar 2025 15:51:47 +0000 (16:51 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 13 Mar 2025 12:02:19 +0000 (13:02 +0100)
This reverts commit 833f69be62ac366b5c23b4a6434389e470dd5c7f which is
commit 419cfb983ca93e75e905794521afefcfa07988bb upstream.

It should not have been applied.

Link: https://lore.kernel.org/r/CABgObfb5U9zwTQBPkPB=mKu-vMrRspPCm4wfxoQpB+SyAnb5WQ@mail.gmail.com
Reported-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/powerpc/kvm/e500_mmu_host.c

index e5a145b578a4768e158357114f80505da380a33f..334dd96f8081470ed05858ee576ee90d4c78df99 100644 (file)
@@ -322,7 +322,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
 {
        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;
@@ -444,7 +443,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
 
        if (likely(!pfnmap)) {
                tsize_pages = 1UL << (tsize + 10 - PAGE_SHIFT);
-               pfn = __kvm_faultin_pfn(slot, gfn, FOLL_WRITE, NULL, &page);
+               pfn = gfn_to_pfn_memslot(slot, gfn);
                if (is_error_noslot_pfn(pfn)) {
                        if (printk_ratelimit())
                                pr_err("%s: real page not found for gfn %lx\n",
@@ -489,6 +488,8 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
                }
        }
        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);
@@ -497,7 +498,8 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,
        kvmppc_mmu_flush_icache(pfn);
 
 out:
-       kvm_release_faultin_page(kvm, page, !!ret, writable);
+       /* Drop refcount on page, so that mmu notifiers can clear it */
+       kvm_release_pfn_clean(pfn);
        spin_unlock(&kvm->mmu_lock);
        return ret;
 }