 /* See comment in mm/memory.c remap_pfn_range */ vma->vm_flags |= VM_IO | VM_RESERVED; 
int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,			unsigned long pfn, unsigned long size, pgprot_t prot){	int error = 0;	pgd_t * dir;	unsigned long beg = from;	unsigned long end = from + size;	struct mm_struct *mm = vma->vm_mm;	int space = GET_IOSPACE(pfn);	unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;	prot = __pgprot(pg_iobits);	offset -= from;	dir = pgd_offset(mm, from);	flush_cache_range(vma, beg, end);	spin_lock(&mm->page_table_lock);	while (from < end) {		pmd_t *pmd = pmd_alloc(current->mm, dir, from);		error = -ENOMEM;		if (!pmd)			break;		error = io_remap_pmd_range(mm, pmd, from, end - from, offset + from, prot, space);		if (error)			break;		from = (from + PGDIR_SIZE) & PGDIR_MASK;		dir++;	}	spin_unlock(&mm->page_table_lock);	flush_tlb_range(vma, beg, end);	return error;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/b5810039a54e5babf428e9a1e89fc1940fabff11/generic.c/buggy/arch/sparc/mm/generic.c