]> Pileus Git - ~andy/linux/blobdiff - drivers/gpu/drm/drm_gem.c
Merge branch 'for-3.5-take-2' of git://linux-nfs.org/~bfields/linux
[~andy/linux] / drivers / gpu / drm / drm_gem.c
index 83114b5e3cee236fe6a2f5b2cb261d6ba1abb3f8..d58e69da1fb5b4aa1bf62cf9d27c5486d56fa567 100644 (file)
@@ -201,6 +201,19 @@ free:
 }
 EXPORT_SYMBOL(drm_gem_object_alloc);
 
+static void
+drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp)
+{
+       if (obj->import_attach) {
+               drm_prime_remove_imported_buf_handle(&filp->prime,
+                               obj->import_attach->dmabuf);
+       }
+       if (obj->export_dma_buf) {
+               drm_prime_remove_imported_buf_handle(&filp->prime,
+                               obj->export_dma_buf);
+       }
+}
+
 /**
  * Removes the mapping from handle to filp for this object.
  */
@@ -233,9 +246,7 @@ drm_gem_handle_delete(struct drm_file *filp, u32 handle)
        idr_remove(&filp->object_idr, handle);
        spin_unlock(&filp->table_lock);
 
-       if (obj->import_attach)
-               drm_prime_remove_imported_buf_handle(&filp->prime,
-                               obj->import_attach->dmabuf);
+       drm_gem_remove_prime_handles(obj, filp);
 
        if (dev->driver->gem_close_object)
                dev->driver->gem_close_object(obj, filp);
@@ -272,8 +283,7 @@ again:
        spin_unlock(&file_priv->table_lock);
        if (ret == -EAGAIN)
                goto again;
-
-       if (ret != 0)
+       else if (ret)
                return ret;
 
        drm_gem_object_handle_reference(obj);
@@ -329,7 +339,7 @@ drm_gem_create_mmap_offset(struct drm_gem_object *obj)
        struct drm_gem_mm *mm = dev->mm_private;
        struct drm_map_list *list;
        struct drm_local_map *map;
-       int ret = 0;
+       int ret;
 
        /* Set the object up for mmap'ing */
        list = &obj->map_list;
@@ -456,8 +466,7 @@ again:
 
                if (ret == -EAGAIN)
                        goto again;
-
-               if (ret != 0)
+               else if (ret)
                        goto err;
 
                /* Allocate a reference for the name table.  */
@@ -532,9 +541,7 @@ drm_gem_object_release_handle(int id, void *ptr, void *data)
        struct drm_gem_object *obj = ptr;
        struct drm_device *dev = obj->dev;
 
-       if (obj->import_attach)
-               drm_prime_remove_imported_buf_handle(&file_priv->prime,
-                               obj->import_attach->dmabuf);
+       drm_gem_remove_prime_handles(obj, file_priv);
 
        if (dev->driver->gem_close_object)
                dev->driver->gem_close_object(obj, file_priv);
@@ -628,7 +635,7 @@ void drm_gem_vm_open(struct vm_area_struct *vma)
        drm_gem_object_reference(obj);
 
        mutex_lock(&obj->dev->struct_mutex);
-       drm_vm_open_locked(vma);
+       drm_vm_open_locked(obj->dev, vma);
        mutex_unlock(&obj->dev->struct_mutex);
 }
 EXPORT_SYMBOL(drm_gem_vm_open);
@@ -639,7 +646,7 @@ void drm_gem_vm_close(struct vm_area_struct *vma)
        struct drm_device *dev = obj->dev;
 
        mutex_lock(&dev->struct_mutex);
-       drm_vm_close_locked(vma);
+       drm_vm_close_locked(obj->dev, vma);
        drm_gem_object_unreference(obj);
        mutex_unlock(&dev->struct_mutex);
 }
@@ -712,7 +719,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
         */
        drm_gem_object_reference(obj);
 
-       drm_vm_open_locked(vma);
+       drm_vm_open_locked(dev, vma);
 
 out_unlock:
        mutex_unlock(&dev->struct_mutex);