Lines Matching refs:obj
134 struct drm_gem_object *obj, size_t size) in drm_gem_object_init() argument
138 drm_gem_private_object_init(dev, obj, size); in drm_gem_object_init()
144 obj->filp = filp; in drm_gem_object_init()
161 struct drm_gem_object *obj, size_t size) in drm_gem_private_object_init() argument
165 obj->dev = dev; in drm_gem_private_object_init()
166 obj->filp = NULL; in drm_gem_private_object_init()
168 kref_init(&obj->refcount); in drm_gem_private_object_init()
169 obj->handle_count = 0; in drm_gem_private_object_init()
170 obj->size = size; in drm_gem_private_object_init()
171 drm_vma_node_reset(&obj->vma_node); in drm_gem_private_object_init()
176 drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp) in drm_gem_remove_prime_handles() argument
183 if (obj->dma_buf) { in drm_gem_remove_prime_handles()
185 obj->dma_buf); in drm_gem_remove_prime_handles()
200 static void drm_gem_object_handle_free(struct drm_gem_object *obj) in drm_gem_object_handle_free() argument
202 struct drm_device *dev = obj->dev; in drm_gem_object_handle_free()
205 if (obj->name) { in drm_gem_object_handle_free()
206 idr_remove(&dev->object_name_idr, obj->name); in drm_gem_object_handle_free()
207 obj->name = 0; in drm_gem_object_handle_free()
211 static void drm_gem_object_exported_dma_buf_free(struct drm_gem_object *obj) in drm_gem_object_exported_dma_buf_free() argument
214 if (obj->dma_buf) { in drm_gem_object_exported_dma_buf_free()
215 dma_buf_put(obj->dma_buf); in drm_gem_object_exported_dma_buf_free()
216 obj->dma_buf = NULL; in drm_gem_object_exported_dma_buf_free()
221 drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj) in drm_gem_object_handle_unreference_unlocked() argument
223 if (WARN_ON(obj->handle_count == 0)) in drm_gem_object_handle_unreference_unlocked()
232 mutex_lock(&obj->dev->object_name_lock); in drm_gem_object_handle_unreference_unlocked()
233 if (--obj->handle_count == 0) { in drm_gem_object_handle_unreference_unlocked()
234 drm_gem_object_handle_free(obj); in drm_gem_object_handle_unreference_unlocked()
235 drm_gem_object_exported_dma_buf_free(obj); in drm_gem_object_handle_unreference_unlocked()
237 mutex_unlock(&obj->dev->object_name_lock); in drm_gem_object_handle_unreference_unlocked()
239 drm_gem_object_unreference_unlocked(obj); in drm_gem_object_handle_unreference_unlocked()
254 struct drm_gem_object *obj; in drm_gem_handle_delete() local
268 obj = idr_find(&filp->object_idr, handle); in drm_gem_handle_delete()
269 if (obj == NULL) { in drm_gem_handle_delete()
273 dev = obj->dev; in drm_gem_handle_delete()
280 drm_gem_remove_prime_handles(obj, filp); in drm_gem_handle_delete()
281 drm_vma_node_revoke(&obj->vma_node, filp->filp); in drm_gem_handle_delete()
284 dev->driver->gem_close_object(obj, filp); in drm_gem_handle_delete()
285 drm_gem_object_handle_unreference_unlocked(obj); in drm_gem_handle_delete()
320 struct drm_gem_object *obj, in drm_gem_handle_create_tail() argument
323 struct drm_device *dev = obj->dev; in drm_gem_handle_create_tail()
335 ret = idr_alloc(&file_priv->object_idr, obj, 1, 0, GFP_NOWAIT); in drm_gem_handle_create_tail()
336 drm_gem_object_reference(obj); in drm_gem_handle_create_tail()
337 obj->handle_count++; in drm_gem_handle_create_tail()
342 drm_gem_object_handle_unreference_unlocked(obj); in drm_gem_handle_create_tail()
347 ret = drm_vma_node_allow(&obj->vma_node, file_priv->filp); in drm_gem_handle_create_tail()
354 ret = dev->driver->gem_open_object(obj, file_priv); in drm_gem_handle_create_tail()
375 struct drm_gem_object *obj, in drm_gem_handle_create() argument
378 mutex_lock(&obj->dev->object_name_lock); in drm_gem_handle_create()
380 return drm_gem_handle_create_tail(file_priv, obj, handlep); in drm_gem_handle_create()
392 drm_gem_free_mmap_offset(struct drm_gem_object *obj) in drm_gem_free_mmap_offset() argument
394 struct drm_device *dev = obj->dev; in drm_gem_free_mmap_offset()
396 drm_vma_offset_remove(dev->vma_offset_manager, &obj->vma_node); in drm_gem_free_mmap_offset()
415 drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size) in drm_gem_create_mmap_offset_size() argument
417 struct drm_device *dev = obj->dev; in drm_gem_create_mmap_offset_size()
419 return drm_vma_offset_add(dev->vma_offset_manager, &obj->vma_node, in drm_gem_create_mmap_offset_size()
435 int drm_gem_create_mmap_offset(struct drm_gem_object *obj) in drm_gem_create_mmap_offset() argument
437 return drm_gem_create_mmap_offset_size(obj, obj->size); in drm_gem_create_mmap_offset()
462 struct page **drm_gem_get_pages(struct drm_gem_object *obj) in drm_gem_get_pages() argument
469 mapping = file_inode(obj->filp)->i_mapping; in drm_gem_get_pages()
475 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0); in drm_gem_get_pages()
477 npages = obj->size >> PAGE_SHIFT; in drm_gem_get_pages()
516 void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, in drm_gem_put_pages() argument
525 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0); in drm_gem_put_pages()
527 npages = obj->size >> PAGE_SHIFT; in drm_gem_put_pages()
549 struct drm_gem_object *obj; in drm_gem_object_lookup() local
554 obj = idr_find(&filp->object_idr, handle); in drm_gem_object_lookup()
555 if (obj == NULL) { in drm_gem_object_lookup()
560 drm_gem_object_reference(obj); in drm_gem_object_lookup()
564 return obj; in drm_gem_object_lookup()
607 struct drm_gem_object *obj; in drm_gem_flink_ioctl() local
613 obj = drm_gem_object_lookup(dev, file_priv, args->handle); in drm_gem_flink_ioctl()
614 if (obj == NULL) in drm_gem_flink_ioctl()
620 if (obj->handle_count == 0) { in drm_gem_flink_ioctl()
625 if (!obj->name) { in drm_gem_flink_ioctl()
626 ret = idr_alloc(&dev->object_name_idr, obj, 1, 0, GFP_NOWAIT); in drm_gem_flink_ioctl()
630 obj->name = ret; in drm_gem_flink_ioctl()
633 args->name = (uint64_t) obj->name; in drm_gem_flink_ioctl()
639 drm_gem_object_unreference_unlocked(obj); in drm_gem_flink_ioctl()
659 struct drm_gem_object *obj; in drm_gem_open_ioctl() local
667 obj = idr_find(&dev->object_name_idr, (int) args->name); in drm_gem_open_ioctl()
668 if (obj) { in drm_gem_open_ioctl()
669 drm_gem_object_reference(obj); in drm_gem_open_ioctl()
676 ret = drm_gem_handle_create_tail(file_priv, obj, &handle); in drm_gem_open_ioctl()
677 drm_gem_object_unreference_unlocked(obj); in drm_gem_open_ioctl()
682 args->size = obj->size; in drm_gem_open_ioctl()
710 struct drm_gem_object *obj = ptr; in drm_gem_object_release_handle() local
711 struct drm_device *dev = obj->dev; in drm_gem_object_release_handle()
714 drm_gem_remove_prime_handles(obj, file_priv); in drm_gem_object_release_handle()
715 drm_vma_node_revoke(&obj->vma_node, file_priv->filp); in drm_gem_object_release_handle()
718 dev->driver->gem_close_object(obj, file_priv); in drm_gem_object_release_handle()
720 drm_gem_object_handle_unreference_unlocked(obj); in drm_gem_object_release_handle()
743 drm_gem_object_release(struct drm_gem_object *obj) in drm_gem_object_release() argument
745 WARN_ON(obj->dma_buf); in drm_gem_object_release()
747 if (obj->filp) in drm_gem_object_release()
748 fput(obj->filp); in drm_gem_object_release()
750 drm_gem_free_mmap_offset(obj); in drm_gem_object_release()
766 struct drm_gem_object *obj = in drm_gem_object_free() local
768 struct drm_device *dev = obj->dev; in drm_gem_object_free()
773 dev->driver->gem_free_object(obj); in drm_gem_object_free()
779 struct drm_gem_object *obj = vma->vm_private_data; in drm_gem_vm_open() local
781 drm_gem_object_reference(obj); in drm_gem_vm_open()
787 struct drm_gem_object *obj = vma->vm_private_data; in drm_gem_vm_close() local
789 drm_gem_object_unreference_unlocked(obj); in drm_gem_vm_close()
817 int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size, in drm_gem_mmap_obj() argument
820 struct drm_device *dev = obj->dev; in drm_gem_mmap_obj()
831 vma->vm_private_data = obj; in drm_gem_mmap_obj()
840 drm_gem_object_reference(obj); in drm_gem_mmap_obj()
865 struct drm_gem_object *obj = NULL; in drm_gem_mmap() local
877 obj = container_of(node, struct drm_gem_object, vma_node); in drm_gem_mmap()
888 if (!kref_get_unless_zero(&obj->refcount)) in drm_gem_mmap()
889 obj = NULL; in drm_gem_mmap()
893 if (!obj) in drm_gem_mmap()
897 drm_gem_object_unreference_unlocked(obj); in drm_gem_mmap()
901 ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, in drm_gem_mmap()
904 drm_gem_object_unreference_unlocked(obj); in drm_gem_mmap()