unsigned long first = start & HUGETLB_PGDIR_MASK; unsigned long last = end + HUGETLB_PGDIR_SIZE - 1; struct mm_struct *mm = tlb->mm;  if (!prev) { prev = mm->mmap; if (!prev) goto no_mmaps; if (prev->vm_end > start) { if (last > prev->vm_start) last = prev->vm_start; goto no_mmaps; } } for (;;) { struct vm_area_struct *next = prev->vm_next;  if (next) { if (next->vm_start < start) { prev = next; continue; } if (last > next->vm_start) last = next->vm_start; } if (prev->vm_end > first) first = prev->vm_end; break; } no_mmaps: if (last < first)	/* for arches with discontiguous pgd indices */ return; clear_page_range(tlb, first, last); 
void hugetlb_free_pgtables(struct mmu_gather *tlb, struct vm_area_struct *prev,	unsigned long start, unsigned long end){	unsigned long first = start & HUGETLB_PGDIR_MASK;	unsigned long last = end + HUGETLB_PGDIR_SIZE - 1;	struct mm_struct *mm = tlb->mm;	if (!prev) {		prev = mm->mmap;		if (!prev)			goto no_mmaps;		if (prev->vm_end > start) {			if (last > prev->vm_start)				last = prev->vm_start;			goto no_mmaps;		}	}	for (;;) {		struct vm_area_struct *next = prev->vm_next;		if (next) {			if (next->vm_start < start) {				prev = next;				continue;			}			if (last > next->vm_start)				last = next->vm_start;		}		if (prev->vm_end > first)			first = prev->vm_end;		break;	}no_mmaps:	if (last < first)	/* for arches with discontiguous pgd indices */		return;	clear_page_range(tlb, first, last);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/e0da382c92626ad1d7f4b7527d19b80104d67a83/hugetlbpage.c/buggy/arch/ia64/mm/hugetlbpage.c