unsigned long *start, unsigned long *end)
{
unsigned long next = round_up(*end, size);
+ VMA_ITERATOR(vmi, walk->mm, walk->vma->vm_end)
VM_BUG_ON(mask & size);
VM_BUG_ON(*start >= *end);
VM_BUG_ON((next & mask) != (*start & mask));
- while (walk->vma) {
- if (next >= walk->vma->vm_end) {
- walk->vma = walk->vma->vm_next;
+ for_each_mte_vma(vmi, walk->vma) {
+ if (next >= walk->vma->vm_end)
continue;
- }
if ((next & mask) != (walk->vma->vm_start & mask))
return false;
- if (should_skip_vma(walk->vma->vm_start, walk->vma->vm_end, walk)) {
- walk->vma = walk->vma->vm_next;
+ if (should_skip_vma(walk->vma->vm_start, walk->vma->vm_end, walk))
continue;
- }
*start = max(next, walk->vma->vm_start);
next = (next | ~mask) + 1;
/* the caller might be holding the lock for write */
if (mmap_read_trylock(mm)) {
unsigned long start = walk->next_addr;
- unsigned long end = mm->highest_vm_end;
+ unsigned long end = ULONG_MAX;
err = walk_page_range(mm, start, end, &mm_walk_ops, walk);