|
@@ -179,7 +179,7 @@ int ttm_base_object_init(struct ttm_object_file *tfile,
|
|
|
if (unlikely(ret != 0))
|
|
|
goto out_err0;
|
|
|
|
|
|
- ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL);
|
|
|
+ ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL, false);
|
|
|
if (unlikely(ret != 0))
|
|
|
goto out_err1;
|
|
|
|
|
@@ -318,7 +318,8 @@ EXPORT_SYMBOL(ttm_ref_object_exists);
|
|
|
|
|
|
int ttm_ref_object_add(struct ttm_object_file *tfile,
|
|
|
struct ttm_base_object *base,
|
|
|
- enum ttm_ref_type ref_type, bool *existed)
|
|
|
+ enum ttm_ref_type ref_type, bool *existed,
|
|
|
+ bool require_existed)
|
|
|
{
|
|
|
struct drm_open_hash *ht = &tfile->ref_hash[ref_type];
|
|
|
struct ttm_ref_object *ref;
|
|
@@ -345,6 +346,9 @@ int ttm_ref_object_add(struct ttm_object_file *tfile,
|
|
|
}
|
|
|
|
|
|
rcu_read_unlock();
|
|
|
+ if (require_existed)
|
|
|
+ return -EPERM;
|
|
|
+
|
|
|
ret = ttm_mem_global_alloc(mem_glob, sizeof(*ref),
|
|
|
false, false);
|
|
|
if (unlikely(ret != 0))
|
|
@@ -635,7 +639,7 @@ int ttm_prime_fd_to_handle(struct ttm_object_file *tfile,
|
|
|
prime = (struct ttm_prime_object *) dma_buf->priv;
|
|
|
base = &prime->base;
|
|
|
*handle = base->hash.key;
|
|
|
- ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL);
|
|
|
+ ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL, false);
|
|
|
|
|
|
dma_buf_put(dma_buf);
|
|
|
|