Merge tag 'drm-misc-next-2020-10-27' of git://anongit.freedesktop.org/drm/drm-misc...
[sfrench/cifs-2.6.git] / drivers / gpu / drm / drm_gem.c
index 69c2c079d8036bcde1d17b717c50ea5168cea2a1..d586068f55091242c081650fd86679e70f26fac5 100644 (file)
@@ -247,12 +247,9 @@ drm_gem_object_release_handle(int id, void *ptr, void *data)
 {
        struct drm_file *file_priv = data;
        struct drm_gem_object *obj = ptr;
-       struct drm_device *dev = obj->dev;
 
-       if (obj->funcs && obj->funcs->close)
+       if (obj->funcs->close)
                obj->funcs->close(obj, file_priv);
-       else if (dev->driver->gem_close_object)
-               dev->driver->gem_close_object(obj, file_priv);
 
        drm_gem_remove_prime_handles(obj, file_priv);
        drm_vma_node_revoke(&obj->vma_node, file_priv);
@@ -403,14 +400,10 @@ drm_gem_handle_create_tail(struct drm_file *file_priv,
        if (ret)
                goto err_remove;
 
-       if (obj->funcs && obj->funcs->open) {
+       if (obj->funcs->open) {
                ret = obj->funcs->open(obj, file_priv);
                if (ret)
                        goto err_revoke;
-       } else if (dev->driver->gem_open_object) {
-               ret = dev->driver->gem_open_object(obj, file_priv);
-               if (ret)
-                       goto err_revoke;
        }
 
        *handlep = handle;
@@ -982,12 +975,11 @@ drm_gem_object_free(struct kref *kref)
 {
        struct drm_gem_object *obj =
                container_of(kref, struct drm_gem_object, refcount);
-       struct drm_device *dev = obj->dev;
 
-       if (obj->funcs)
-               obj->funcs->free(obj);
-       else if (dev->driver->gem_free_object_unlocked)
-               dev->driver->gem_free_object_unlocked(obj);
+       if (WARN_ON(!obj->funcs->free))
+               return;
+
+       obj->funcs->free(obj);
 }
 EXPORT_SYMBOL(drm_gem_object_free);
 
@@ -1049,9 +1041,9 @@ EXPORT_SYMBOL(drm_gem_vm_close);
  * @obj_size: the object size to be mapped, in bytes
  * @vma: VMA for the area to be mapped
  *
- * Set up the VMA to prepare mapping of the GEM object using the gem_vm_ops
- * provided by the driver. Depending on their requirements, drivers can either
- * provide a fault handler in their gem_vm_ops (in which case any accesses to
+ * Set up the VMA to prepare mapping of the GEM object using the GEM object's
+ * vm_ops. Depending on their requirements, GEM objects can either
+ * provide a fault handler in their vm_ops (in which case any accesses to
  * the object will be trapped, to perform migration, GTT binding, surface
  * register allocation, or performance monitoring), or mmap the buffer memory
  * synchronously after calling drm_gem_mmap_obj.
@@ -1065,12 +1057,11 @@ EXPORT_SYMBOL(drm_gem_vm_close);
  * callers must verify access restrictions before calling this helper.
  *
  * Return 0 or success or -EINVAL if the object size is smaller than the VMA
- * size, or if no gem_vm_ops are provided.
+ * size, or if no vm_ops are provided.
  */
 int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
                     struct vm_area_struct *vma)
 {
-       struct drm_device *dev = obj->dev;
        int ret;
 
        /* Check for valid size. */
@@ -1087,7 +1078,7 @@ int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
 
        vma->vm_private_data = obj;
 
-       if (obj->funcs && obj->funcs->mmap) {
+       if (obj->funcs->mmap) {
                ret = obj->funcs->mmap(obj, vma);
                if (ret) {
                        drm_gem_object_put(obj);
@@ -1095,10 +1086,8 @@ int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
                }
                WARN_ON(!(vma->vm_flags & VM_DONTEXPAND));
        } else {
-               if (obj->funcs && obj->funcs->vm_ops)
+               if (obj->funcs->vm_ops)
                        vma->vm_ops = obj->funcs->vm_ops;
-               else if (dev->driver->gem_vm_ops)
-                       vma->vm_ops = dev->driver->gem_vm_ops;
                else {
                        drm_gem_object_put(obj);
                        return -EINVAL;
@@ -1198,36 +1187,30 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent,
        drm_printf_indent(p, indent, "imported=%s\n",
                          obj->import_attach ? "yes" : "no");
 
-       if (obj->funcs && obj->funcs->print_info)
+       if (obj->funcs->print_info)
                obj->funcs->print_info(p, indent, obj);
 }
 
 int drm_gem_pin(struct drm_gem_object *obj)
 {
-       if (obj->funcs && obj->funcs->pin)
+       if (obj->funcs->pin)
                return obj->funcs->pin(obj);
-       else if (obj->dev->driver->gem_prime_pin)
-               return obj->dev->driver->gem_prime_pin(obj);
        else
                return 0;
 }
 
 void drm_gem_unpin(struct drm_gem_object *obj)
 {
-       if (obj->funcs && obj->funcs->unpin)
+       if (obj->funcs->unpin)
                obj->funcs->unpin(obj);
-       else if (obj->dev->driver->gem_prime_unpin)
-               obj->dev->driver->gem_prime_unpin(obj);
 }
 
 void *drm_gem_vmap(struct drm_gem_object *obj)
 {
        void *vaddr;
 
-       if (obj->funcs && obj->funcs->vmap)
+       if (obj->funcs->vmap)
                vaddr = obj->funcs->vmap(obj);
-       else if (obj->dev->driver->gem_prime_vmap)
-               vaddr = obj->dev->driver->gem_prime_vmap(obj);
        else
                vaddr = ERR_PTR(-EOPNOTSUPP);
 
@@ -1242,10 +1225,8 @@ void drm_gem_vunmap(struct drm_gem_object *obj, void *vaddr)
        if (!vaddr)
                return;
 
-       if (obj->funcs && obj->funcs->vunmap)
+       if (obj->funcs->vunmap)
                obj->funcs->vunmap(obj, vaddr);
-       else if (obj->dev->driver->gem_prime_vunmap)
-               obj->dev->driver->gem_prime_vunmap(obj, vaddr);
 }
 
 /**