From 9fbeefadb8f053d9ce2b3abf918428b72551b58b Mon Sep 17 00:00:00 2001 From: Bahadir Balban Date: Fri, 1 May 2009 23:12:27 +0300 Subject: [PATCH] Slight modification in reaching/freeing of pmds. --- src/arch/arm/v5/mm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/arch/arm/v5/mm.c b/src/arch/arm/v5/mm.c index 8250162..d0204c1 100644 --- a/src/arch/arm/v5/mm.c +++ b/src/arch/arm/v5/mm.c @@ -463,10 +463,12 @@ out_error: /* Find all allocated pmds and free them */ for (int i = 0; i < PGD_ENTRY_TOTAL; i++) { if ((pgd->entry[i] & PGD_TYPE_MASK) == PGD_TYPE_COARSE) { - /* Clear coarse indicator from address */ - pgd->entry[i] &= ~PGD_TYPE_COARSE; - /* Free pmd by converting to its virtual value first */ - free_pmd((void *)phys_to_virt(pgd->entry[i])); + /* Obtain the pmd handle */ + pmd = (pmd_table_t *) + phys_to_virt((pgd->entry[i] & + PGD_COARSE_ALIGN_MASK)); + /* Free pmd */ + free_pmd(pmd); } } /* Free the pgd */