[PATCH] m68k: fix __iounmap for 030
authorRoman Zippel <zippel@linux-m68k.org>
Sun, 25 Jun 2006 12:46:55 +0000 (05:46 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Sun, 25 Jun 2006 17:00:56 +0000 (10:00 -0700)
Ignore empty pmd entry during iomap (these are the holes between the
mappings).

Signed-off-by: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/m68k/mm/kmap.c

index 85ad19a0ac792ddc16e4a74be3854f3f752cd3cc..43ffab0487242140e070f267d35ea7f14dd83d59 100644 (file)
@@ -259,13 +259,15 @@ void __iounmap(void *addr, unsigned long size)
 
                if (CPU_IS_020_OR_030) {
                        int pmd_off = (virtaddr/PTRTREESIZE) & 15;
+                       int pmd_type = pmd_dir->pmd[pmd_off] & _DESCTYPE_MASK;
 
-                       if ((pmd_dir->pmd[pmd_off] & _DESCTYPE_MASK) == _PAGE_PRESENT) {
+                       if (pmd_type == _PAGE_PRESENT) {
                                pmd_dir->pmd[pmd_off] = 0;
                                virtaddr += PTRTREESIZE;
                                size -= PTRTREESIZE;
                                continue;
-                       }
+                       } else if (pmd_type == 0)
+                               continue;
                }
 
                if (pmd_bad(*pmd_dir)) {