]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/char/drm/drm_vm.c
drm: remove drm_ioremap and drm_ioremapfree
[karo-tx-linux.git] / drivers / char / drm / drm_vm.c
index ae2691942ddb16b2ffdd3a5f4703a7ddb95b694f..4e480583a27fb6bbe912ef929de53ceca8ce8089 100644 (file)
@@ -227,7 +227,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
                                                           map->size);
                                        DRM_DEBUG("mtrr_del = %d\n", retcode);
                                }
-                               drm_ioremapfree(map->handle, map->size, dev);
+                               iounmap(map->handle);
                                break;
                        case _DRM_SHM:
                                vfree(map->handle);
@@ -473,6 +473,22 @@ static int drm_mmap_dma(struct file *filp, struct vm_area_struct *vma)
        }
        unlock_kernel();
 
+       if (!capable(CAP_SYS_ADMIN) &&
+           (dma->flags & _DRM_DMA_USE_PCI_RO)) {
+               vma->vm_flags &= ~(VM_WRITE | VM_MAYWRITE);
+#if defined(__i386__) || defined(__x86_64__)
+               pgprot_val(vma->vm_page_prot) &= ~_PAGE_RW;
+#else
+               /* Ye gads this is ugly.  With more thought
+                  we could move this up higher and use
+                  `protection_map' instead.  */
+               vma->vm_page_prot =
+                   __pgprot(pte_val
+                            (pte_wrprotect
+                             (__pte(pgprot_val(vma->vm_page_prot)))));
+#endif
+       }
+
        vma->vm_ops = &drm_vm_dma_ops;
 
        vma->vm_flags |= VM_RESERVED;   /* Don't swap */