Re: [PATCH v4 09/19] ARM: LPAE: Page table maintenance for the3-level format

From: Catalin Marinas
Date: Thu Feb 03 2011 - 12:09:29 EST


On Mon, 2011-01-24 at 17:55 +0000, Catalin Marinas wrote:
> --- a/arch/arm/mm/pgd.c
> +++ b/arch/arm/mm/pgd.c
> @@ -80,20 +98,36 @@ void pgd_free(struct mm_struct *mm, pgd_t *pgd_base)
> if (!pgd_base)
> return;
>
> - pgd = pgd_base + pgd_index(0);
> - if (pgd_none_or_clear_bad(pgd))
> - goto no_pgd;
> + if (!vectors_high()) {
> + pgd = pgd_base + pgd_index(0);
> + if (pgd_none_or_clear_bad(pgd))
> + goto no_pgd;
>
> - pmd = pmd_offset(pgd, 0);
> - if (pmd_none_or_clear_bad(pmd))
> - goto no_pmd;
> + pmd = pmd_offset(pgd, 0);
> + if (pmd_none_or_clear_bad(pmd))
> + goto no_pmd;
>
> - pte = pmd_pgtable(*pmd);
> - pmd_clear(pmd);
> - pte_free(mm, pte);
> + pte = pmd_pgtable(*pmd);
> + pmd_clear(pmd);
> + pte_free(mm, pte);
> no_pmd:
> - pgd_clear(pgd);
> - pmd_free(mm, pmd);
> + pgd_clear(pgd);
> + pmd_free(mm, pmd);
> + }
> no_pgd:

I pushed some fixups to the arm-lpae branch mentioned in the cover
letter.

The hunk above doesn't need to be applied since FIRST_USER_ADDRESS is
non-zero on ARM and free_pgtables() misses the first PMD when cleaning
up user page tables (hence leaking some memory).

--
Catalin


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/