OSDN Git Service

KVM: x86/mmu: Remove obsolete gfn restoration in FNAME(fetch)
authorSean Christopherson <sean.j.christopherson@intel.com>
Wed, 8 Jan 2020 20:24:44 +0000 (12:24 -0800)
committerPaolo Bonzini <pbonzini@redhat.com>
Mon, 27 Jan 2020 19:00:07 +0000 (20:00 +0100)
Remove logic to retrieve the original gfn now that HugeTLB mappings are
are identified in FNAME(fetch), i.e. FNAME(page_fault) no longer adjusts
the level or gfn.

Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/mmu/paging_tmpl.h

index 472c32c..885da92 100644 (file)
@@ -636,7 +636,7 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr,
        struct kvm_shadow_walk_iterator it;
        unsigned direct_access, access = gw->pt_access;
        int top_level, hlevel, ret;
-       gfn_t gfn, base_gfn;
+       gfn_t base_gfn = gw->gfn;
 
        direct_access = gw->pte_access;
 
@@ -681,13 +681,6 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr,
                        link_shadow_page(vcpu, it.sptep, sp);
        }
 
-       /*
-        * FNAME(page_fault) might have clobbered the bottom bits of
-        * gw->gfn, restore them from the virtual address.
-        */
-       gfn = gw->gfn | ((addr & PT_LVL_OFFSET_MASK(gw->level)) >> PAGE_SHIFT);
-       base_gfn = gfn;
-
        hlevel = kvm_mmu_hugepage_adjust(vcpu, gw->gfn, max_level, &pfn);
 
        trace_kvm_mmu_spte_requested(addr, gw->level, pfn);
@@ -699,9 +692,9 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gpa_t addr,
                 * We cannot overwrite existing page tables with an NX
                 * large page, as the leaf could be executable.
                 */
-               disallowed_hugepage_adjust(it, gfn, &pfn, &hlevel);
+               disallowed_hugepage_adjust(it, gw->gfn, &pfn, &hlevel);
 
-               base_gfn = gfn & ~(KVM_PAGES_PER_HPAGE(it.level) - 1);
+               base_gfn = gw->gfn & ~(KVM_PAGES_PER_HPAGE(it.level) - 1);
                if (it.level == hlevel)
                        break;