in mm/mm-nds32.c [43:68]
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_lruvec_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);
}