Commit 392b2c83 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman Committed by Wentao Guan
Browse files

Revert "KVM: PPC: e500: Use __kvm_faultin_pfn() to handle page faults"

stable inclusion
from stable-v6.6.83
commit 36f688adf413e2e5273db5e6227f286d1d8bb871
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IBX1M5

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=36f688adf413e2e5273db5e6227f286d1d8bb871

--------------------------------

This reverts commit ba3cf83f4a5063edb6ee150633e641954ce30478 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: default avatarPaolo Bonzini <pbonzini@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit 36f688adf413e2e5273db5e6227f286d1d8bb871)
Signed-off-by: default avatarWentao Guan <guanwentao@uniontech.com>
parent 6b15ae74
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -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;
}