|
@@ -702,27 +702,6 @@ static void __meminit free_pmd_table(pmd_t *pmd_start, pud_t *pud)
|
|
|
spin_unlock(&init_mm.page_table_lock);
|
|
|
}
|
|
|
|
|
|
-/* Return true if pgd is changed, otherwise return false. */
|
|
|
-static bool __meminit free_pud_table(pud_t *pud_start, pgd_t *pgd)
|
|
|
-{
|
|
|
- pud_t *pud;
|
|
|
- int i;
|
|
|
-
|
|
|
- for (i = 0; i < PTRS_PER_PUD; i++) {
|
|
|
- pud = pud_start + i;
|
|
|
- if (!pud_none(*pud))
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /* free a pud table */
|
|
|
- free_pagetable(pgd_page(*pgd), 0);
|
|
|
- spin_lock(&init_mm.page_table_lock);
|
|
|
- pgd_clear(pgd);
|
|
|
- spin_unlock(&init_mm.page_table_lock);
|
|
|
-
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
static void __meminit
|
|
|
remove_pte_table(pte_t *pte_start, unsigned long addr, unsigned long end,
|
|
|
bool direct)
|
|
@@ -913,7 +892,6 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
|
|
unsigned long addr;
|
|
|
pgd_t *pgd;
|
|
|
pud_t *pud;
|
|
|
- bool pgd_changed = false;
|
|
|
|
|
|
for (addr = start; addr < end; addr = next) {
|
|
|
next = pgd_addr_end(addr, end);
|
|
@@ -924,13 +902,8 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
|
|
|
|
|
pud = (pud_t *)pgd_page_vaddr(*pgd);
|
|
|
remove_pud_table(pud, addr, next, direct);
|
|
|
- if (free_pud_table(pud, pgd))
|
|
|
- pgd_changed = true;
|
|
|
}
|
|
|
|
|
|
- if (pgd_changed)
|
|
|
- sync_global_pgds(start, end - 1, 1);
|
|
|
-
|
|
|
flush_tlb_all();
|
|
|
}
|
|
|
|