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] / drivers / sbus / char / flash.c
index f35cb32..2beb3dd 100644 (file)
@@ -22,8 +22,9 @@
 #include <asm/io.h>
 #include <asm/sbus.h>
 #include <asm/ebus.h>
+#include <asm/upa.h>
 
-static spinlock_t flash_lock = SPIN_LOCK_UNLOCKED;
+static DEFINE_SPINLOCK(flash_lock);
 static struct {
        unsigned long read_base;        /* Physical read address */
        unsigned long write_base;       /* Physical write address */
@@ -65,16 +66,15 @@ flash_mmap(struct file *file, struct vm_area_struct *vma)
 
        if ((vma->vm_pgoff << PAGE_SHIFT) > size)
                return -ENXIO;
-       addr += (vma->vm_pgoff << PAGE_SHIFT);
+       addr = vma->vm_pgoff + (addr >> PAGE_SHIFT);
 
        if (vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT)) > size)
                size = vma->vm_end - (vma->vm_start + (vma->vm_pgoff << PAGE_SHIFT));
 
-       pgprot_val(vma->vm_page_prot) &= ~(_PAGE_CACHE);
-       pgprot_val(vma->vm_page_prot) |= _PAGE_E;
        vma->vm_flags |= (VM_SHM | VM_LOCKED);
+       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
 
-       if (remap_page_range(vma, vma->vm_start, addr, size, vma->vm_page_prot))
+       if (io_remap_pfn_range(vma, vma->vm_start, addr, size, vma->vm_page_prot))
                return -EAGAIN;
                
        return 0;
@@ -115,7 +115,7 @@ flash_read(struct file * file, char __user * buf,
                count = flash.read_size - p;
 
        for (i = 0; i < count; i++) {
-               u8 data = readb(flash.read_base + p + i);
+               u8 data = upa_readb(flash.read_base + p + i);
                if (put_user(data, buf))
                        return -EFAULT;
                buf++;