1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Copyright (C) 2020 Loongson Technology Corporation Limited 4 */ 5 #include <linux/export.h> 6 #include <linux/mm.h> 7 #include <linux/string.h> 8 #include <asm/pgalloc.h> 9 pgd_alloc(struct mm_struct * mm)10pgd_t *pgd_alloc(struct mm_struct *mm) 11 { 12 pgd_t *ret, *init; 13 14 ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER); 15 if (ret) { 16 init = pgd_offset(&init_mm, 0UL); 17 pgd_init((unsigned long)ret); 18 memcpy(ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD, 19 (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t)); 20 } 21 22 return ret; 23 } 24 EXPORT_SYMBOL_GPL(pgd_alloc); 25