]> bbs.cooldavid.org Git - net-next-2.6.git/blobdiff - drivers/gpu/drm/drm_vm.c
drm: fix end of loop test
[net-next-2.6.git] / drivers / gpu / drm / drm_vm.c
index c3b13fb41d0cd557dcf1bf2897d9a5b331356828..fda67468e603b6169393b92bc4922afef8b4d8ce 100644 (file)
@@ -61,7 +61,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
                tmp = pgprot_writecombine(tmp);
        else
                tmp = pgprot_noncached(tmp);
-#elif defined(__sparc__)
+#elif defined(__sparc__) || defined(__arm__)
        tmp = pgprot_noncached(tmp);
 #endif
        return tmp;
@@ -138,7 +138,7 @@ static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
                                break;
                }
 
-               if (!agpmem)
+               if (&agpmem->head == &dev->agp->memory)
                        goto vm_fault_error;
 
                /*
@@ -601,6 +601,7 @@ int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
        }
 
        switch (map->type) {
+#if !defined(__arm__)
        case _DRM_AGP:
                if (drm_core_has_AGP(dev) && dev->agp->cant_use_aperture) {
                        /*
@@ -615,20 +616,31 @@ int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
                        break;
                }
                /* fall through to _DRM_FRAME_BUFFER... */
+#endif
        case _DRM_FRAME_BUFFER:
        case _DRM_REGISTERS:
                offset = dev->driver->get_reg_ofs(dev);
                vma->vm_flags |= VM_IO; /* not in core dump */
                vma->vm_page_prot = drm_io_prot(map->type, vma);
+#if !defined(__arm__)
                if (io_remap_pfn_range(vma, vma->vm_start,
                                       (map->offset + offset) >> PAGE_SHIFT,
                                       vma->vm_end - vma->vm_start,
                                       vma->vm_page_prot))
                        return -EAGAIN;
+#else
+               if (remap_pfn_range(vma, vma->vm_start,
+                                       (map->offset + offset) >> PAGE_SHIFT,
+                                       vma->vm_end - vma->vm_start,
+                                       vma->vm_page_prot))
+                       return -EAGAIN;
+#endif
+
                DRM_DEBUG("   Type = %d; start = 0x%lx, end = 0x%lx,"
                          " offset = 0x%llx\n",
                          map->type,
                          vma->vm_start, vma->vm_end, (unsigned long long)(map->offset + offset));
+
                vma->vm_ops = &drm_vm_ops;
                break;
        case _DRM_CONSISTENT: