From: Uwe Kleine-König Date: Wed, 27 Feb 2008 12:44:59 +0000 (+0100) Subject: [ARM] Fix freeing of page tables for ARM in free_pgd_slow X-Git-Tag: firefly_0821_release~22210^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0c82d83cb09a1c9fd4d24d32064ce827709c104b;p=firefly-linux-kernel-4.4.55.git [ARM] Fix freeing of page tables for ARM in free_pgd_slow Since 2f569af (CONFIG_HIGHPTE vs. sub-page page tables.) pte_free() calls pte_lock_deinit() and dec_zone_page_state(). So free_pgd_slow must not call the latter two when calling the first. Signed-off-by: Uwe Kleine-König Cc: Martin Schwidefsky Cc: Andrew Morton Cc: Linus Torvalds Signed-off-by: Russell King --- diff --git a/arch/arm/mm/pgd.c b/arch/arm/mm/pgd.c index 500c9610ab30..e0f19ab91163 100644 --- a/arch/arm/mm/pgd.c +++ b/arch/arm/mm/pgd.c @@ -75,7 +75,7 @@ no_pgd: void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd) { pmd_t *pmd; - struct page *pte; + pgtable_t pte; if (!pgd) return; @@ -90,10 +90,8 @@ void free_pgd_slow(struct mm_struct *mm, pgd_t *pgd) goto free; } - pte = pmd_page(*pmd); + pte = pmd_pgtable(*pmd); pmd_clear(pmd); - dec_zone_page_state(virt_to_page((unsigned long *)pgd), NR_PAGETABLE); - pte_lock_deinit(pte); pte_free(mm, pte); pmd_free(mm, pmd); free: