pgtable.c (651B)
1/* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 */ 6#include <linux/export.h> 7#include <linux/mm.h> 8#include <linux/string.h> 9#include <asm/pgalloc.h> 10 11pgd_t *pgd_alloc(struct mm_struct *mm) 12{ 13 pgd_t *ret, *init; 14 15 ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER); 16 if (ret) { 17 init = pgd_offset(&init_mm, 0UL); 18 pgd_init((unsigned long)ret); 19 memcpy(ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD, 20 (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); 21 } 22 23 return ret; 24} 25EXPORT_SYMBOL_GPL(pgd_alloc);