lkml.org 
[lkml]   [2010]   [May]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/5] KVM: MMU: introduce some macros to cleanup hlist traverseing
    On 05/30/2010 03:36 PM, Xiao Guangrong wrote:
    > Introduce for_each_gfn_sp(), for_each_gfn_indirect_sp() and
    > for_each_gfn_indirect_valid_sp() to cleanup hlist traverseing
    >
    > Signed-off-by: Xiao Guangrong<xiaoguangrong@cn.fujitsu.com>
    > ---
    > arch/x86/kvm/mmu.c | 129 ++++++++++++++++++++++------------------------------
    > 1 files changed, 54 insertions(+), 75 deletions(-)
    >
    > diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
    > index 56f8c3c..84c705e 100644
    > --- a/arch/x86/kvm/mmu.c
    > +++ b/arch/x86/kvm/mmu.c
    > @@ -1200,6 +1200,22 @@ static void kvm_unlink_unsync_page(struct kvm *kvm, struct kvm_mmu_page *sp)
    >
    > static int kvm_mmu_zap_page(struct kvm *kvm, struct kvm_mmu_page *sp);
    >
    > +#define for_each_gfn_sp(kvm, sp, gfn, pos, n) \
    > + hlist_for_each_entry_safe(sp, pos, n, \
    > + &kvm->arch.mmu_page_hash[kvm_page_table_hashfn(gfn)], hash_link)\
    > + if (sp->gfn == gfn)
    >


    if (...)
    for_each_gfn_sp(...)
    blah();
    else
    BUG();

    will break. Can do 'if ((sp)->gfn != (gfn)) ; else'.

    Or call functions from the for (;;) parameters to advance the cursor.

    (also use parentheses to protect macro arguments)



    > +
    > +#define for_each_gfn_indirect_sp(kvm, sp, gfn, pos, n) \
    > + hlist_for_each_entry_safe(sp, pos, n, \
    > + &kvm->arch.mmu_page_hash[kvm_page_table_hashfn(gfn)], hash_link)\
    > + if (sp->gfn == gfn&& !sp->role.direct)
    > +
    > +#define for_each_gfn_indirect_valid_sp(kvm, sp, gfn, pos, n) \
    > + hlist_for_each_entry_safe(sp, pos, n, \
    > + &kvm->arch.mmu_page_hash[kvm_page_table_hashfn(gfn)], hash_link)\
    > + if (sp->gfn == gfn&& !sp->role.direct&& \
    > + !sp->role.invalid)
    >

    Shouldn't we always skip invalid gfns? What about providing both gfn
    and role to the macro?

    --
    error compiling committee.c: too many arguments to function



    \
     
     \ /
      Last update: 2010-05-30 15:15    [W:0.021 / U:2.504 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site