|
@@ -976,19 +976,20 @@ static void __meminit
|
|
remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
|
remove_pagetable(unsigned long start, unsigned long end, bool direct)
|
|
{
|
|
{
|
|
unsigned long next;
|
|
unsigned long next;
|
|
|
|
+ unsigned long addr;
|
|
pgd_t *pgd;
|
|
pgd_t *pgd;
|
|
pud_t *pud;
|
|
pud_t *pud;
|
|
bool pgd_changed = false;
|
|
bool pgd_changed = false;
|
|
|
|
|
|
- for (; start < end; start = next) {
|
|
|
|
- next = pgd_addr_end(start, end);
|
|
|
|
|
|
+ for (addr = start; addr < end; addr = next) {
|
|
|
|
+ next = pgd_addr_end(addr, end);
|
|
|
|
|
|
- pgd = pgd_offset_k(start);
|
|
|
|
|
|
+ pgd = pgd_offset_k(addr);
|
|
if (!pgd_present(*pgd))
|
|
if (!pgd_present(*pgd))
|
|
continue;
|
|
continue;
|
|
|
|
|
|
pud = (pud_t *)pgd_page_vaddr(*pgd);
|
|
pud = (pud_t *)pgd_page_vaddr(*pgd);
|
|
- remove_pud_table(pud, start, next, direct);
|
|
|
|
|
|
+ remove_pud_table(pud, addr, next, direct);
|
|
if (free_pud_table(pud, pgd))
|
|
if (free_pud_table(pud, pgd))
|
|
pgd_changed = true;
|
|
pgd_changed = true;
|
|
}
|
|
}
|