x86: fix bad pmd ffff810000207xxx(9090909090909090)
authorHugh Dickins <hugh@veritas.com>
Wed, 28 May 2008 18:36:07 +0000 (19:36 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 4 Jun 2008 11:11:47 +0000 (13:11 +0200)
OGAWA Hirofumi and Fede have reported rare pmd_ERROR messages:
mm/memory.c:127: bad pmd ffff810000207xxx(9090909090909090).

Initialization's cleanup_highmap was leaving alignment filler
behind in the pmd for MODULES_VADDR: when vmalloc's guard page
would occupy a new page table, it's not allocated, and then
module unload's vfree hits the bad 9090 pmd entry left over.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/mm/init_64.c

index 32ba13b0f818183bbeb2eb37eba74c1bdc4a35a9..998a06ea5f7d17b2d5172ab14df80a0d5e7d4b93 100644 (file)
@@ -206,7 +206,7 @@ void __init cleanup_highmap(void)
        pmd_t *last_pmd = pmd + PTRS_PER_PMD;
 
        for (; pmd < last_pmd; pmd++, vaddr += PMD_SIZE) {
-               if (!pmd_present(*pmd))
+               if (pmd_none(*pmd))
                        continue;
                if (vaddr < (unsigned long) _text || vaddr > end)
                        set_pmd(pmd, __pmd(0));