Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / arch / sh64 / mm / ioremap.c
index 8e05490..fb1866f 100644 (file)
@@ -79,7 +79,7 @@ static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned lo
                BUG();
 
        do {
-               pte_t * pte = pte_alloc_kernel(&init_mm, pmd, address);
+               pte_t * pte = pte_alloc_kernel(pmd, address);
                if (!pte)
                        return -ENOMEM;
                remap_area_pte(pte, address, end - address, address + phys_addr, flags);
@@ -101,7 +101,6 @@ static int remap_area_pages(unsigned long address, unsigned long phys_addr,
        flush_cache_all();
        if (address >= end)
                BUG();
-       spin_lock(&init_mm.page_table_lock);
        do {
                pmd_t *pmd = pmd_alloc(&init_mm, dir, address);
                error = -ENOMEM;
@@ -115,7 +114,6 @@ static int remap_area_pages(unsigned long address, unsigned long phys_addr,
                address = (address + PGDIR_SIZE) & PGDIR_MASK;
                dir++;
        } while (address && (address < end));
-       spin_unlock(&init_mm.page_table_lock);
        flush_tlb_all();
        return 0;
 }
@@ -182,8 +180,8 @@ void iounmap(void *addr)
 }
 
 static struct resource shmedia_iomap = {
-        .name  = "shmedia_iomap",
-       .start  = IOBASE_VADDR,
+       .name   = "shmedia_iomap",
+       .start  = IOBASE_VADDR + PAGE_SIZE,
        .end    = IOBASE_END - 1,
 };
 
@@ -400,7 +398,7 @@ static void shmedia_unmapioaddr(unsigned long vaddr)
                return;
 
        clear_page((void *)ptep);
-       pte_clear(ptep);
+       pte_clear(&init_mm, vaddr, ptep);
 }
 
 unsigned long onchip_remap(unsigned long phys, unsigned long size, const char *name)