--------------------
All GEM objects are reference-counted by the GEM core. References can be
-acquired and release by calling drm_gem_object_get() and drm_gem_object_put_unlocked()
+acquired and release by calling drm_gem_object_get() and drm_gem_object_put()
respectively.
When the last reference to a GEM object is released the GEM core calls
drm_gem_vunmap(buffer->gem, buffer->vaddr);
if (buffer->gem)
- drm_gem_object_put_unlocked(buffer->gem);
+ drm_gem_object_put(buffer->gem);
if (buffer->handle)
drm_mode_destroy_dumb(dev, buffer->handle, buffer->client->file);
mutex_unlock(&dev->object_name_lock);
if (final)
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
}
/*
*offset = drm_vma_node_offset_addr(&obj->vma_node);
out:
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return ret;
}
* Returns:
*
* @objs filled in with GEM object pointers. Returned GEM objects need to be
- * released with drm_gem_object_put_unlocked(). -ENOENT is returned on a lookup
+ * released with drm_gem_object_put(). -ENOENT is returned on a lookup
* failure. 0 is returned on success.
*
*/
else if (ret > 0)
ret = 0;
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return ret;
}
err:
mutex_unlock(&dev->object_name_lock);
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return ret;
}
/* drm_gem_handle_create_tail unlocks dev->object_name_lock. */
ret = drm_gem_handle_create_tail(file_priv, obj, &handle);
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
if (ret)
return ret;
* driver doesn't use &drm_device.struct_mutex for anything.
*
* For drivers not encumbered with legacy locking use
- * drm_gem_object_put_unlocked() instead.
+ * drm_gem_object_put() instead.
*/
void
drm_gem_object_put_locked(struct drm_gem_object *obj)
{
struct drm_gem_object *obj = vma->vm_private_data;
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
}
EXPORT_SYMBOL(drm_gem_vm_close);
if (obj->funcs && obj->funcs->mmap) {
ret = obj->funcs->mmap(obj, vma);
if (ret) {
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return ret;
}
WARN_ON(!(vma->vm_flags & VM_DONTEXPAND));
else if (dev->driver->gem_vm_ops)
vma->vm_ops = dev->driver->gem_vm_ops;
else {
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return -EINVAL;
}
return -EINVAL;
if (!drm_vma_node_is_allowed(node, priv)) {
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return -EACCES;
}
if (node->readonly) {
if (vma->vm_flags & VM_WRITE) {
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return -EINVAL;
}
ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT,
vma);
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return ret;
}
return cma_obj;
error:
- drm_gem_object_put_unlocked(&cma_obj->base);
+ drm_gem_object_put(&cma_obj->base);
return ERR_PTR(ret);
}
EXPORT_SYMBOL_GPL(drm_gem_cma_create);
*/
ret = drm_gem_handle_create(file_priv, gem_obj, handle);
/* drop reference from allocate - handle holds it now. */
- drm_gem_object_put_unlocked(gem_obj);
+ drm_gem_object_put(gem_obj);
if (ret)
return ERR_PTR(ret);
return -EINVAL;
if (!drm_vma_node_is_allowed(node, priv)) {
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return -EACCES;
}
cma_obj = to_drm_gem_cma_obj(obj);
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
return cma_obj->vaddr ? (unsigned long)cma_obj->vaddr : -EINVAL;
}
int i;
for (i = 0; i < 4; i++)
- drm_gem_object_put_unlocked(fb->obj[i]);
+ drm_gem_object_put(fb->obj[i]);
drm_framebuffer_cleanup(fb);
kfree(fb);
+ mode_cmd->offsets[i];
if (objs[i]->size < min_size) {
- drm_gem_object_put_unlocked(objs[i]);
+ drm_gem_object_put(objs[i]);
ret = -EINVAL;
goto err_gem_object_put;
}
err_gem_object_put:
for (i--; i >= 0; i--)
- drm_gem_object_put_unlocked(objs[i]);
+ drm_gem_object_put(objs[i]);
return ret;
}
*/
ret = drm_gem_handle_create(file_priv, &shmem->base, handle);
/* drop reference from allocate - handle holds it now. */
- drm_gem_object_put_unlocked(&shmem->base);
+ drm_gem_object_put(&shmem->base);
if (ret)
return ERR_PTR(ret);
err_free_array:
kvfree(shmem->pages);
err_free_gem:
- drm_gem_object_put_unlocked(&shmem->base);
+ drm_gem_object_put(&shmem->base);
return ERR_PTR(ret);
}
* ttm has its own object refcounting, so drop gem reference
* to avoid double accounting counting.
*/
- drm_gem_object_put_unlocked(gem);
+ drm_gem_object_put(gem);
return 0;
}
ret = drm_gem_handle_create(file, &gbo->bo.base, &handle);
if (ret)
- goto err_drm_gem_object_put_unlocked;
+ goto err_drm_gem_object_put;
- drm_gem_object_put_unlocked(&gbo->bo.base);
+ drm_gem_object_put(&gbo->bo.base);
args->pitch = pitch;
args->size = size;
return 0;
-err_drm_gem_object_put_unlocked:
- drm_gem_object_put_unlocked(&gbo->bo.base);
+err_drm_gem_object_put:
+ drm_gem_object_put(&gbo->bo.base);
return ret;
}
EXPORT_SYMBOL(drm_gem_vram_fill_create_dumb);
gbo = drm_gem_vram_of_gem(gem);
*offset = drm_gem_vram_mmap_offset(gbo);
- drm_gem_object_put_unlocked(gem);
+ drm_gem_object_put(gem);
return 0;
}
struct drm_device *dev = obj->dev;
/* drop the reference on the export fd holds */
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
drm_dev_put(dev);
}
/* _handle_create_tail unconditionally unlocks dev->object_name_lock. */
ret = drm_gem_handle_create_tail(file_priv, obj, handle);
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
if (ret)
goto out_put;
fail_put_dmabuf:
dma_buf_put(dmabuf);
out:
- drm_gem_object_put_unlocked(obj);
+ drm_gem_object_put(obj);
out_unlock:
mutex_unlock(&file_priv->prime.lock);
* Reference count of this object
*
* Please use drm_gem_object_get() to acquire and drm_gem_object_put_locked()
- * or drm_gem_object_put_unlocked() to release a reference to a GEM
+ * or drm_gem_object_put() to release a reference to a GEM
* buffer object.
*/
struct kref refcount;