cregit-Linux how code gets into the kernel

Release 4.18 arch/nds32/mm/mm-nds32.c

Directory: arch/nds32/mm
// SPDX-License-Identifier: GPL-2.0
// Copyright (C) 2005-2017 Andes Technology Corporation

#include <linux/init_task.h>
#include <asm/pgalloc.h>


#define FIRST_KERNEL_PGD_NR	(USER_PTRS_PER_PGD)

/*
 * need to get a page for level 1
 */


pgd_t *pgd_alloc(struct mm_struct *mm) { pgd_t *new_pgd, *init_pgd; int i; new_pgd = (pgd_t *) __get_free_pages(GFP_KERNEL, 0); if (!new_pgd) return NULL; for (i = 0; i < PTRS_PER_PGD; i++) { (*new_pgd) = 1; new_pgd++; } new_pgd -= PTRS_PER_PGD; init_pgd = pgd_offset_k(0); memcpy(new_pgd + FIRST_KERNEL_PGD_NR, init_pgd + FIRST_KERNEL_PGD_NR, (PTRS_PER_PGD - FIRST_KERNEL_PGD_NR) * sizeof(pgd_t)); cpu_dcache_wb_range((unsigned long)new_pgd, (unsigned long)new_pgd + PTRS_PER_PGD * sizeof(pgd_t)); inc_zone_page_state(virt_to_page((unsigned long *)new_pgd), NR_PAGETABLE); return new_pgd; }

Contributors

PersonTokensPropCommitsCommitProp
Greentime Hu140100.00%1100.00%
Total140100.00%1100.00%


void pgd_free(struct mm_struct *mm, pgd_t * pgd) { pmd_t *pmd; struct page *pte; if (!pgd) return; pmd = (pmd_t *) pgd; if (pmd_none(*pmd)) goto free; if (pmd_bad(*pmd)) { pmd_ERROR(*pmd); pmd_clear(pmd); goto free; } pte = pmd_page(*pmd); pmd_clear(pmd); dec_zone_page_state(virt_to_page((unsigned long *)pgd), NR_PAGETABLE); pte_free(mm, pte); mm_dec_nr_ptes(mm); pmd_free(mm, pmd); free: free_pages((unsigned long)pgd, 0); }

Contributors

PersonTokensPropCommitsCommitProp
Greentime Hu132100.00%1100.00%
Total132100.00%1100.00%

/* * In order to soft-boot, we need to insert a 1:1 mapping in place of * the user-mode pages. This will then ensure that we have predictable * results when turning the mmu off */
void setup_mm_for_reboot(char mode) { unsigned long pmdval; pgd_t *pgd; pmd_t *pmd; int i; if (current->mm && current->mm->pgd) pgd = current->mm->pgd; else pgd = init_mm.pgd; for (i = 0; i < USER_PTRS_PER_PGD; i++) { pmdval = (i << PGDIR_SHIFT); pmd = pmd_offset(pgd + i, i << PGDIR_SHIFT); set_pmd(pmd, __pmd(pmdval)); } }

Contributors

PersonTokensPropCommitsCommitProp
Greentime Hu96100.00%1100.00%
Total96100.00%1100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
Greentime Hu382100.00%1100.00%
Total382100.00%1100.00%
Directory: arch/nds32/mm
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.