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    [from the cache]
©2003-2011 Jasper Spaans