mm: change vunmap to tear down huge KVA mappings
[linux-2.6-block.git] / mm / vmalloc.c
index a48cd061f16f1d24d7c6450153ae446eb02c08d0..a5bbdd3b5d6782b3bdb013d0b9698723639d1e78 100644 (file)
@@ -75,6 +75,8 @@ static void vunmap_pmd_range(pud_t *pud, unsigned long addr, unsigned long end)
        pmd = pmd_offset(pud, addr);
        do {
                next = pmd_addr_end(addr, end);
+               if (pmd_clear_huge(pmd))
+                       continue;
                if (pmd_none_or_clear_bad(pmd))
                        continue;
                vunmap_pte_range(pmd, addr, next);
@@ -89,6 +91,8 @@ static void vunmap_pud_range(pgd_t *pgd, unsigned long addr, unsigned long end)
        pud = pud_offset(pgd, addr);
        do {
                next = pud_addr_end(addr, end);
+               if (pud_clear_huge(pud))
+                       continue;
                if (pud_none_or_clear_bad(pud))
                        continue;
                vunmap_pmd_range(pud, addr, next);