fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / m68k / mm / kmap.c
index 85ad19a..46b7d60 100644 (file)
@@ -7,7 +7,7 @@
  *          used by other architectures                /Roman Zippel
  */
 
-#include <linux/config.h>
+#include <linux/module.h>
 #include <linux/mm.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
@@ -59,7 +59,7 @@ static struct vm_struct *get_io_area(unsigned long size)
        unsigned long addr;
        struct vm_struct **p, *tmp, *area;
 
-       area = (struct vm_struct *)kmalloc(sizeof(*area), GFP_KERNEL);
+       area = kmalloc(sizeof(*area), GFP_KERNEL);
        if (!area)
                return NULL;
        addr = KMAP_START;
@@ -220,6 +220,7 @@ void __iomem *__ioremap(unsigned long physaddr, unsigned long size, int cachefla
 
        return (void __iomem *)retaddr;
 }
+EXPORT_SYMBOL(__ioremap);
 
 /*
  * Unmap a ioremap()ed region again
@@ -235,6 +236,7 @@ void iounmap(void __iomem *addr)
        free_io_area((__force void *)addr);
 #endif
 }
+EXPORT_SYMBOL(iounmap);
 
 /*
  * __iounmap unmaps nearly everything, so be careful
@@ -259,13 +261,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)) {
@@ -359,3 +363,4 @@ void kernel_set_cachemode(void *addr, unsigned long size, int cmode)
 
        flush_tlb_all();
 }
+EXPORT_SYMBOL(kernel_set_cachemode);