[PATCH v4 07/10] KVM: arm64: Convert pkvm_mappings to interval tree
Quentin Perret
qperret at google.com
Mon May 19 07:22:05 PDT 2025
On Friday 16 May 2025 at 14:15:45 (+0100), Marc Zyngier wrote:
> > -/*
> > - * __tmp is updated to rb_next(__tmp) *before* entering the body of the loop to allow freeing
> > - * of __map inline.
> > - */
> > +INTERVAL_TREE_DEFINE(struct pkvm_mapping, node, u64, __subtree_last,
> > + __pkvm_mapping_start, __pkvm_mapping_end, static,
> > + pkvm_mapping);
> > +
> > #define for_each_mapping_in_range_safe(__pgt, __start, __end, __map) \
> > - for (struct rb_node *__tmp = find_first_mapping_node(&(__pgt)->pkvm_mappings, \
> > - ((__start) >> PAGE_SHIFT)); \
> > + for (struct pkvm_mapping *__tmp = pkvm_mapping_iter_first(&(__pgt)->pkvm_mappings, \
> > + __start, __end - 1); \
> > __tmp && ({ \
> > - __map = rb_entry(__tmp, struct pkvm_mapping, node); \
> > - __tmp = rb_next(__tmp); \
> > + __map = __tmp; \
> > + __tmp = pkvm_mapping_iter_next(__map, __start, __end - 1); \
> > true; \
> > }); \
> > - ) \
> > - if (__map->gfn < ((__start) >> PAGE_SHIFT)) \
> > - continue; \
> > - else if (__map->gfn >= ((__end) >> PAGE_SHIFT)) \
> > - break; \
> > - else
> > + )
>
> The removal of the comment worries me a bit. Is this iterator still
> safe wrt freeing of the iterator in the loop?
Yep it is still safe (we're still caching the next value in __tmp before
entering the body of the loop). But we shouldn't remove the comment
altogether, it just needs an update.
Cheers,
Quentin
More information about the linux-arm-kernel
mailing list