/* * Copy over the kernel and IO PGD entries */ memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR, (PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t));  clean_dcache_area(new_pgd, PTRS_PER_PGD * sizeof(pgd_t));  
pgd_t *get_pgd_slow(struct mm_struct *mm){	pgd_t *new_pgd, *init_pgd;	pmd_t *new_pmd, *init_pmd;	pte_t *new_pte, *init_pte;	new_pgd = (pgd_t *)__get_free_pages(GFP_KERNEL, 2);	if (!new_pgd)		goto no_pgd;	memzero(new_pgd, FIRST_KERNEL_PGD_NR * sizeof(pgd_t));	init_pgd = pgd_offset_k(0);	if (!vectors_high()) {		/*		 * This lock is here just to satisfy pmd_alloc and pte_lock		 */		spin_lock(&mm->page_table_lock);		/*		 * On ARM, first page must always be allocated since it		 * contains the machine vectors.		 */		new_pmd = pmd_alloc(mm, new_pgd, 0);		if (!new_pmd)			goto no_pmd;		new_pte = pte_alloc_map(mm, new_pmd, 0);		if (!new_pte)			goto no_pte;		init_pmd = pmd_offset(init_pgd, 0);		init_pte = pte_offset_map_nested(init_pmd, 0);		set_pte(new_pte, *init_pte);		pte_unmap_nested(init_pte);		pte_unmap(new_pte);		spin_unlock(&mm->page_table_lock);	}	/*	 * Copy over the kernel and IO PGD entries	 */	memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR,		       (PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t));	clean_dcache_area(new_pgd, PTRS_PER_PGD * sizeof(pgd_t));	return new_pgd;no_pte:	spin_unlock(&mm->page_table_lock);	pmd_free(new_pmd);	free_pages((unsigned long)new_pgd, 2);	return NULL;no_pmd:	spin_unlock(&mm->page_table_lock);	free_pages((unsigned long)new_pgd, 2);	return NULL;no_pgd:	return NULL;}
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/a343e6075a396e07eeff52c0da5629c8fd396be2/mm-armv.c/clean/arch/arm/mm/mm-armv.c