Lines Matching refs:obj
190 struct drm_gem_object *obj, size_t size) in drm_gem_object_init() argument
194 drm_gem_private_object_init(dev, obj, size); in drm_gem_object_init()
199 obj->filp = filp; in drm_gem_object_init()
216 struct drm_gem_object *obj, size_t size) in drm_gem_private_object_init() argument
220 obj->dev = dev; in drm_gem_private_object_init()
221 obj->filp = NULL; in drm_gem_private_object_init()
223 kref_init(&obj->refcount); in drm_gem_private_object_init()
224 obj->handle_count = 0; in drm_gem_private_object_init()
225 obj->size = size; in drm_gem_private_object_init()
226 drm_vma_node_reset(&obj->vma_node); in drm_gem_private_object_init()
231 drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp) in drm_gem_remove_prime_handles() argument
238 if (obj->dma_buf) { in drm_gem_remove_prime_handles()
240 obj->dma_buf); in drm_gem_remove_prime_handles()
255 static void drm_gem_object_handle_free(struct drm_gem_object *obj) in drm_gem_object_handle_free() argument
257 struct drm_device *dev = obj->dev; in drm_gem_object_handle_free()
260 if (obj->name) { in drm_gem_object_handle_free()
261 idr_remove(&dev->object_name_idr, obj->name); in drm_gem_object_handle_free()
262 obj->name = 0; in drm_gem_object_handle_free()
266 static void drm_gem_object_exported_dma_buf_free(struct drm_gem_object *obj) in drm_gem_object_exported_dma_buf_free() argument
269 if (obj->dma_buf) { in drm_gem_object_exported_dma_buf_free()
270 dma_buf_put(obj->dma_buf); in drm_gem_object_exported_dma_buf_free()
271 obj->dma_buf = NULL; in drm_gem_object_exported_dma_buf_free()
276 drm_gem_object_handle_put_unlocked(struct drm_gem_object *obj) in drm_gem_object_handle_put_unlocked() argument
278 struct drm_device *dev = obj->dev; in drm_gem_object_handle_put_unlocked()
281 if (WARN_ON(obj->handle_count == 0)) in drm_gem_object_handle_put_unlocked()
291 if (--obj->handle_count == 0) { in drm_gem_object_handle_put_unlocked()
292 drm_gem_object_handle_free(obj); in drm_gem_object_handle_put_unlocked()
293 drm_gem_object_exported_dma_buf_free(obj); in drm_gem_object_handle_put_unlocked()
299 drm_gem_object_put_unlocked(obj); in drm_gem_object_handle_put_unlocked()
310 struct drm_gem_object *obj = ptr; in drm_gem_object_release_handle() local
311 struct drm_device *dev = obj->dev; in drm_gem_object_release_handle()
314 dev->driver->gem_close_object(obj, file_priv); in drm_gem_object_release_handle()
317 drm_gem_remove_prime_handles(obj, file_priv); in drm_gem_object_release_handle()
318 drm_vma_node_revoke(&obj->vma_node, file_priv); in drm_gem_object_release_handle()
320 drm_gem_object_handle_put_unlocked(obj); in drm_gem_object_release_handle()
337 struct drm_gem_object *obj; in drm_gem_handle_delete() local
351 obj = idr_replace(&filp->object_idr, NULL, handle); in drm_gem_handle_delete()
353 if (IS_ERR_OR_NULL(obj)) in drm_gem_handle_delete()
357 drm_gem_object_release_handle(handle, obj, filp); in drm_gem_handle_delete()
384 struct drm_gem_object *obj; in drm_gem_dumb_map_offset() local
387 obj = drm_gem_object_lookup(file, handle); in drm_gem_dumb_map_offset()
388 if (!obj) in drm_gem_dumb_map_offset()
392 if (obj->import_attach) { in drm_gem_dumb_map_offset()
397 ret = drm_gem_create_mmap_offset(obj); in drm_gem_dumb_map_offset()
401 *offset = drm_vma_node_offset_addr(&obj->vma_node); in drm_gem_dumb_map_offset()
403 drm_gem_object_put_unlocked(obj); in drm_gem_dumb_map_offset()
442 struct drm_gem_object *obj, in drm_gem_handle_create_tail() argument
445 struct drm_device *dev = obj->dev; in drm_gem_handle_create_tail()
450 if (obj->handle_count++ == 0) in drm_gem_handle_create_tail()
451 drm_gem_object_get(obj); in drm_gem_handle_create_tail()
460 ret = idr_alloc(&file_priv->object_idr, obj, 1, 0, GFP_NOWAIT); in drm_gem_handle_create_tail()
471 ret = drm_vma_node_allow(&obj->vma_node, file_priv); in drm_gem_handle_create_tail()
476 ret = dev->driver->gem_open_object(obj, file_priv); in drm_gem_handle_create_tail()
485 drm_vma_node_revoke(&obj->vma_node, file_priv); in drm_gem_handle_create_tail()
491 drm_gem_object_handle_put_unlocked(obj); in drm_gem_handle_create_tail()
506 struct drm_gem_object *obj, in drm_gem_handle_create() argument
509 mutex_lock(&obj->dev->object_name_lock); in drm_gem_handle_create()
511 return drm_gem_handle_create_tail(file_priv, obj, handlep); in drm_gem_handle_create()
526 drm_gem_free_mmap_offset(struct drm_gem_object *obj) in drm_gem_free_mmap_offset() argument
528 struct drm_device *dev = obj->dev; in drm_gem_free_mmap_offset()
533 if (!obj->on_map) in drm_gem_free_mmap_offset()
535 list = &obj->map_list; in drm_gem_free_mmap_offset()
539 obj->on_map = false; in drm_gem_free_mmap_offset()
541 drm_vma_offset_remove(dev->vma_offset_manager, &obj->vma_node); in drm_gem_free_mmap_offset()
563 drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size) in drm_gem_create_mmap_offset_size() argument
565 struct drm_device *dev = obj->dev; in drm_gem_create_mmap_offset_size()
569 if (obj->on_map) in drm_gem_create_mmap_offset_size()
572 obj->map_list.key = alloc_unr(mm->idxunr); in drm_gem_create_mmap_offset_size()
573 ret = drm_ht_insert_item(&mm->offset_hash, &obj->map_list); in drm_gem_create_mmap_offset_size()
576 free_unr(mm->idxunr, obj->map_list.key); in drm_gem_create_mmap_offset_size()
579 obj->on_map = true; in drm_gem_create_mmap_offset_size()
581 return drm_vma_offset_add(dev->vma_offset_manager, &obj->vma_node, in drm_gem_create_mmap_offset_size()
600 int drm_gem_create_mmap_offset(struct drm_gem_object *obj) in drm_gem_create_mmap_offset() argument
602 return drm_gem_create_mmap_offset_size(obj, obj->size); in drm_gem_create_mmap_offset()
619 struct drm_gem_object *obj; in drm_gem_object_lookup() local
624 obj = idr_find(&filp->object_idr, handle); in drm_gem_object_lookup()
625 if (obj) in drm_gem_object_lookup()
626 drm_gem_object_get(obj); in drm_gem_object_lookup()
630 return obj; in drm_gem_object_lookup()
673 struct drm_gem_object *obj; in drm_gem_flink_ioctl() local
679 obj = drm_gem_object_lookup(file_priv, args->handle); in drm_gem_flink_ioctl()
680 if (obj == NULL) in drm_gem_flink_ioctl()
685 if (obj->handle_count == 0) { in drm_gem_flink_ioctl()
690 if (!obj->name) { in drm_gem_flink_ioctl()
691 ret = idr_alloc(&dev->object_name_idr, obj, 1, 0, GFP_KERNEL); in drm_gem_flink_ioctl()
695 obj->name = ret; in drm_gem_flink_ioctl()
698 args->name = (uint64_t) obj->name; in drm_gem_flink_ioctl()
703 drm_gem_object_put_unlocked(obj); in drm_gem_flink_ioctl()
723 struct drm_gem_object *obj; in drm_gem_open_ioctl() local
731 obj = idr_find(&dev->object_name_idr, (int) args->name); in drm_gem_open_ioctl()
732 if (obj) { in drm_gem_open_ioctl()
733 drm_gem_object_get(obj); in drm_gem_open_ioctl()
740 ret = drm_gem_handle_create_tail(file_priv, obj, &handle); in drm_gem_open_ioctl()
741 drm_gem_object_put_unlocked(obj); in drm_gem_open_ioctl()
746 args->size = obj->size; in drm_gem_open_ioctl()
791 drm_gem_object_release(struct drm_gem_object *obj) in drm_gem_object_release() argument
793 WARN_ON(obj->dma_buf); in drm_gem_object_release()
798 vm_object_deallocate(obj->filp); in drm_gem_object_release()
800 drm_gem_free_mmap_offset(obj); in drm_gem_object_release()
816 struct drm_gem_object *obj = in drm_gem_object_free() local
818 struct drm_device *dev = obj->dev; in drm_gem_object_free()
821 dev->driver->gem_free_object_unlocked(obj); in drm_gem_object_free()
825 dev->driver->gem_free_object(obj); in drm_gem_object_free()
840 drm_gem_object_put_unlocked(struct drm_gem_object *obj) in drm_gem_object_put_unlocked() argument
844 if (!obj) in drm_gem_object_put_unlocked()
847 dev = obj->dev; in drm_gem_object_put_unlocked()
851 kref_put(&obj->refcount, drm_gem_object_free); in drm_gem_object_put_unlocked()
852 else if (kref_put_mutex(&obj->refcount, drm_gem_object_free, in drm_gem_object_put_unlocked()
870 drm_gem_object_put(struct drm_gem_object *obj) in drm_gem_object_put() argument
872 if (obj) { in drm_gem_object_put()
873 WARN_ON(!mutex_is_locked(&obj->dev->struct_mutex)); in drm_gem_object_put()
875 kref_put(&obj->refcount, drm_gem_object_free); in drm_gem_object_put()
889 struct drm_gem_object *obj = vma->vm_private_data; in drm_gem_vm_open() local
891 drm_gem_object_get(obj); in drm_gem_vm_open()
904 struct drm_gem_object *obj = vma->vm_private_data; in drm_gem_vm_close() local
906 drm_gem_object_put_unlocked(obj); in drm_gem_vm_close()
935 int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
938 struct drm_device *dev = obj->dev;
949 vma->vm_private_data = obj;
959 drm_gem_object_get(obj);
984 struct drm_gem_object *obj = NULL;
996 obj = container_of(node, struct drm_gem_object, vma_node);
1007 if (!kref_get_unless_zero(&obj->refcount))
1008 obj = NULL;
1012 if (!obj)
1016 drm_gem_object_put_unlocked(obj);
1020 ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT,
1023 drm_gem_object_put_unlocked(obj);
1034 struct drm_gem_object *obj; in drm_gem_object_from_offset() local
1046 obj = container_of(hash, struct drm_gem_object, map_list); in drm_gem_object_from_offset()
1047 return (obj); in drm_gem_object_from_offset()