From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: [PATCH v2 8/8] KVM: MMU: Eliminate redundant temporaries in FNAME(fetch) Date: Mon, 12 Jul 2010 14:30:54 +0300 Message-ID: <1278934254-5598-9-git-send-email-avi@redhat.com> References: <1278934254-5598-1-git-send-email-avi@redhat.com> To: Xiao Guangrong , Marcelo Tosatti , kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:61712 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752997Ab0GLLbA (ORCPT ); Mon, 12 Jul 2010 07:31:00 -0400 In-Reply-To: <1278934254-5598-1-git-send-email-avi@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: 'level' and 'sptep' are aliases for 'interator.level' and 'iterator.sptep', no need for them. Signed-off-by: Avi Kivity --- arch/x86/kvm/paging_tmpl.h | 62 +++++++++++++++++-------------------------- 1 files changed, 25 insertions(+), 37 deletions(-) diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h index 05bbbf6..ff3d0c0 100644 --- a/arch/x86/kvm/paging_tmpl.h +++ b/arch/x86/kvm/paging_tmpl.h @@ -326,12 +326,10 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr, { unsigned access = gw->pt_access; struct kvm_mmu_page *uninitialized_var(sp); - u64 *sptep = NULL; - int uninitialized_var(level); bool dirty = is_dirty_gpte(gw->ptes[gw->level - 1]); int top_level; unsigned direct_access; - struct kvm_shadow_walk_iterator iterator; + struct kvm_shadow_walk_iterator uninitialized_var(it); if (!is_present_gpte(gw->ptes[gw->level - 1])) return NULL; @@ -349,25 +347,21 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr, * changed from now on) or it is invalid (in which case, we don't * really care if it changes underneath us after this point). */ - if (!FNAME(validate_indirect_spte)(vcpu, sptep, sp, - gw, top_level)) + if (!FNAME(validate_indirect_spte)(vcpu, it.sptep, sp, gw, top_level)) goto out_error; - for (shadow_walk_init(&iterator, vcpu, addr); - shadow_walk_okay(&iterator) && iterator.level > gw->level; - shadow_walk_next(&iterator)) { + for (shadow_walk_init(&it, vcpu, addr); + shadow_walk_okay(&it) && it.level > gw->level; + shadow_walk_next(&it)) { gfn_t table_gfn; bool new_page = false; - level = iterator.level; - sptep = iterator.sptep; - - drop_large_spte(vcpu, sptep); + drop_large_spte(vcpu, it.sptep); - if (!is_shadow_present_pte(*sptep)) { - table_gfn = gw->table_gfn[level - 2]; - sp = kvm_mmu_get_page(vcpu, table_gfn, addr, level-1, - false, access, sptep); + if (!is_shadow_present_pte(*it.sptep)) { + table_gfn = gw->table_gfn[it.level - 2]; + sp = kvm_mmu_get_page(vcpu, table_gfn, addr, it.level-1, + false, access, it.sptep); new_page = true; } @@ -375,44 +369,38 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr, * Verify that the gpte in the page we've just write * protected is still there. */ - if (!FNAME(validate_indirect_spte)(vcpu, sptep, sp, - gw, level - 1)) + if (!FNAME(validate_indirect_spte)(vcpu, it.sptep, sp, + gw, it.level - 1)) goto out_error; if (new_page) - link_shadow_page(sptep, sp); + link_shadow_page(it.sptep, sp); } for (; - shadow_walk_okay(&iterator) && iterator.level > hlevel; - shadow_walk_next(&iterator)) { + shadow_walk_okay(&it) && it.level > hlevel; + shadow_walk_next(&it)) { gfn_t direct_gfn; - level = iterator.level; - sptep = iterator.sptep; + drop_large_spte(vcpu, it.sptep); - drop_large_spte(vcpu, sptep); - - if (is_shadow_present_pte(*sptep)) + if (is_shadow_present_pte(*it.sptep)) continue; - validate_direct_spte(vcpu, sptep, direct_access); + validate_direct_spte(vcpu, it.sptep, direct_access); - direct_gfn = gw->gfn & ~(KVM_PAGES_PER_HPAGE(level) - 1); + direct_gfn = gw->gfn & ~(KVM_PAGES_PER_HPAGE(it.level) - 1); - sp = kvm_mmu_get_page(vcpu, direct_gfn, addr, level-1, - true, direct_access, sptep); - link_shadow_page(sptep, sp); + sp = kvm_mmu_get_page(vcpu, direct_gfn, addr, it.level-1, + true, direct_access, it.sptep); + link_shadow_page(it.sptep, sp); } - sptep = iterator.sptep; - level = iterator.level; - - mmu_set_spte(vcpu, sptep, access, gw->pte_access & access, - user_fault, write_fault, dirty, ptwrite, level, + mmu_set_spte(vcpu, it.sptep, access, gw->pte_access & access, + user_fault, write_fault, dirty, ptwrite, it.level, gw->gfn, pfn, false, true); - return sptep; + return it.sptep; out_error: kvm_release_pfn_clean(pfn); -- 1.7.1