[PATCH v4 09/19] ARM: LPAE: Page table maintenance for the 3-level format
Catalin Marinas
catalin.marinas at arm.com
Thu Feb 3 12:09:20 EST 2011
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
More information about the linux-arm-kernel
mailing list