mm: introduce vma_set_file function v4
[linux-2.6-microblaze.git] / drivers / gpu / drm / omapdrm / omap_gem.c
index f67f223..f063f5a 100644 (file)
@@ -487,7 +487,7 @@ static vm_fault_t omap_gem_fault_2d(struct drm_gem_object *obj,
  * vma->vm_private_data points to the GEM object that is backing this
  * mapping.
  */
-vm_fault_t omap_gem_fault(struct vm_fault *vmf)
+static vm_fault_t omap_gem_fault(struct vm_fault *vmf)
 {
        struct vm_area_struct *vma = vmf->vma;
        struct drm_gem_object *obj = vma->vm_private_data;
@@ -564,9 +564,8 @@ int omap_gem_mmap_obj(struct drm_gem_object *obj,
                 * address_space (so unmap_mapping_range does what we want,
                 * in particular in the case of mmap'd dmabufs)
                 */
-               fput(vma->vm_file);
                vma->vm_pgoff = 0;
-               vma->vm_file  = get_file(obj->filp);
+               vma_set_file(vma, obj->filp);
 
                vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
        }
@@ -1089,7 +1088,7 @@ void omap_gem_describe_objects(struct list_head *list, struct seq_file *m)
  * Constructor & Destructor
  */
 
-void omap_gem_free_object(struct drm_gem_object *obj)
+static void omap_gem_free_object(struct drm_gem_object *obj)
 {
        struct drm_device *dev = obj->dev;
        struct omap_drm_private *priv = dev->dev_private;
@@ -1169,6 +1168,18 @@ static bool omap_gem_validate_flags(struct drm_device *dev, u32 flags)
        return true;
 }
 
+static const struct vm_operations_struct omap_gem_vm_ops = {
+       .fault = omap_gem_fault,
+       .open = drm_gem_vm_open,
+       .close = drm_gem_vm_close,
+};
+
+static const struct drm_gem_object_funcs omap_gem_object_funcs = {
+       .free = omap_gem_free_object,
+       .export = omap_gem_prime_export,
+       .vm_ops = &omap_gem_vm_ops,
+};
+
 /* GEM buffer object constructor */
 struct drm_gem_object *omap_gem_new(struct drm_device *dev,
                union omap_gem_size gsize, u32 flags)
@@ -1236,6 +1247,8 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
                size = PAGE_ALIGN(gsize.bytes);
        }
 
+       obj->funcs = &omap_gem_object_funcs;
+
        /* Initialize the GEM object. */
        if (!(flags & OMAP_BO_MEM_SHMEM)) {
                drm_gem_private_object_init(dev, obj, size);