From: David Stevens <[email protected]>

Covert usages of the deprecated gfn_to_pfn functions to the new
gfn_to_pfn_page functions.

Signed-off-by: David Stevens <[email protected]>
---
 arch/x86/kvm/mmu.h             |  1 +
 arch/x86/kvm/mmu/mmu.c         | 18 +++++++++++-------
 arch/x86/kvm/mmu/paging_tmpl.h |  9 ++++++---
 arch/x86/kvm/x86.c             |  6 ++++--
 4 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h
index 9ae6168d381e..97d94a9612b6 100644
--- a/arch/x86/kvm/mmu.h
+++ b/arch/x86/kvm/mmu.h
@@ -164,6 +164,7 @@ struct kvm_page_fault {
        /* Outputs of kvm_faultin_pfn.  */
        kvm_pfn_t pfn;
        hva_t hva;
+       struct page *page;
        bool map_writable;
 };
 
diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c
index 04c00c34517e..0626395ff1d9 100644
--- a/arch/x86/kvm/mmu/mmu.c
+++ b/arch/x86/kvm/mmu/mmu.c
@@ -2891,6 +2891,9 @@ void kvm_mmu_hugepage_adjust(struct kvm_vcpu *vcpu, 
struct kvm_page_fault *fault
        if (unlikely(fault->max_level == PG_LEVEL_4K))
                return;
 
+       if (!fault->page)
+               return;
+
        if (is_error_noslot_pfn(fault->pfn) || kvm_is_reserved_pfn(fault->pfn))
                return;
 
@@ -3950,9 +3953,9 @@ static bool kvm_faultin_pfn(struct kvm_vcpu *vcpu, struct 
kvm_page_fault *fault,
        }
 
        async = false;
-       fault->pfn = __gfn_to_pfn_memslot(slot, fault->gfn, false, &async,
-                                         fault->write, &fault->map_writable,
-                                         &fault->hva);
+       fault->pfn = __gfn_to_pfn_page_memslot(slot, fault->gfn, false, &async,
+                                              fault->write, 
&fault->map_writable,
+                                              &fault->hva, &fault->page);
        if (!async)
                return false; /* *pfn has correct page already */
 
@@ -3966,9 +3969,9 @@ static bool kvm_faultin_pfn(struct kvm_vcpu *vcpu, struct 
kvm_page_fault *fault,
                        goto out_retry;
        }
 
-       fault->pfn = __gfn_to_pfn_memslot(slot, fault->gfn, false, NULL,
-                                         fault->write, &fault->map_writable,
-                                         &fault->hva);
+       fault->pfn = __gfn_to_pfn_page_memslot(slot, fault->gfn, false, NULL,
+                                              fault->write, 
&fault->map_writable,
+                                              &fault->hva, &fault->page);
        return false;
 
 out_retry:
@@ -4029,7 +4032,8 @@ static int direct_page_fault(struct kvm_vcpu *vcpu, 
struct kvm_page_fault *fault
                read_unlock(&vcpu->kvm->mmu_lock);
        else
                write_unlock(&vcpu->kvm->mmu_lock);
-       kvm_release_pfn_clean(fault->pfn);
+       if (fault->page)
+               put_page(fault->page);
        return r;
 }
 
diff --git a/arch/x86/kvm/mmu/paging_tmpl.h b/arch/x86/kvm/mmu/paging_tmpl.h
index f87d36898c44..370d52f252a8 100644
--- a/arch/x86/kvm/mmu/paging_tmpl.h
+++ b/arch/x86/kvm/mmu/paging_tmpl.h
@@ -565,6 +565,7 @@ FNAME(prefetch_gpte)(struct kvm_vcpu *vcpu, struct 
kvm_mmu_page *sp,
        unsigned pte_access;
        gfn_t gfn;
        kvm_pfn_t pfn;
+       struct page *page;
 
        if (FNAME(prefetch_invalid_gpte)(vcpu, sp, spte, gpte))
                return false;
@@ -580,12 +581,13 @@ FNAME(prefetch_gpte)(struct kvm_vcpu *vcpu, struct 
kvm_mmu_page *sp,
        if (!slot)
                return false;
 
-       pfn = gfn_to_pfn_memslot_atomic(slot, gfn);
+       pfn = gfn_to_pfn_page_memslot_atomic(slot, gfn, &page);
        if (is_error_pfn(pfn))
                return false;
 
        mmu_set_spte(vcpu, slot, spte, pte_access, gfn, pfn, NULL);
-       kvm_release_pfn_clean(pfn);
+       if (page)
+               put_page(page);
        return true;
 }
 
@@ -923,7 +925,8 @@ static int FNAME(page_fault)(struct kvm_vcpu *vcpu, struct 
kvm_page_fault *fault
 
 out_unlock:
        write_unlock(&vcpu->kvm->mmu_lock);
-       kvm_release_pfn_clean(fault->pfn);
+       if (fault->page)
+               put_page(fault->page);
        return r;
 }
 
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 5c479ae57693..95f56ec43e0b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7820,6 +7820,7 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, 
gpa_t cr2_or_gpa,
 {
        gpa_t gpa = cr2_or_gpa;
        kvm_pfn_t pfn;
+       struct page *page;
 
        if (!(emulation_type & EMULTYPE_ALLOW_RETRY_PF))
                return false;
@@ -7849,7 +7850,7 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, 
gpa_t cr2_or_gpa,
         * retry instruction -> write #PF -> emulation fail -> retry
         * instruction -> ...
         */
-       pfn = gfn_to_pfn(vcpu->kvm, gpa_to_gfn(gpa));
+       pfn = gfn_to_pfn_page(vcpu->kvm, gpa_to_gfn(gpa), &page);
 
        /*
         * If the instruction failed on the error pfn, it can not be fixed,
@@ -7858,7 +7859,8 @@ static bool reexecute_instruction(struct kvm_vcpu *vcpu, 
gpa_t cr2_or_gpa,
        if (is_error_noslot_pfn(pfn))
                return false;
 
-       kvm_release_pfn_clean(pfn);
+       if (page)
+               put_page(page);
 
        /* The instructions are well-emulated on direct mmu. */
        if (vcpu->arch.mmu->direct_map) {
-- 
2.34.0.rc2.393.gf8c9666880-goog

_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm

Reply via email to