static int unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir, unsigned long start, unsigned long end, unsigned int type, unsigned long page) { while (start < end) { if (unuse_pgd(vma, pgdir, start, end - start, type, page)) return 1; start = (start + PGDIR_SIZE) & PGDIR_MASK; pgdir++; } return 0; }
/* mmlist_lock and vma->vm_mm->page_table_lock are held */ static void unuse_vma(struct vm_area_struct * vma, pgd_t *pgdir, swp_entry_t entry, struct page* page) { unsigned long start = vma->vm_start, end = vma->vm_end; if (start >= end) BUG(); do { unuse_pgd(vma, pgdir, start, end - start, entry, page); start = (start + PGDIR_SIZE) & PGDIR_MASK; pgdir++; } while (start && (start < end)); }