• Home
  • Raw
  • Download

Lines Matching refs:obj

126 			struct drm_gem_object *obj, size_t size)  in drm_gem_object_init()  argument
130 drm_gem_private_object_init(dev, obj, size); in drm_gem_object_init()
136 obj->filp = filp; in drm_gem_object_init()
153 struct drm_gem_object *obj, size_t size) in drm_gem_private_object_init() argument
157 obj->dev = dev; in drm_gem_private_object_init()
158 obj->filp = NULL; in drm_gem_private_object_init()
160 kref_init(&obj->refcount); in drm_gem_private_object_init()
161 obj->handle_count = 0; in drm_gem_private_object_init()
162 obj->size = size; in drm_gem_private_object_init()
163 dma_resv_init(&obj->_resv); in drm_gem_private_object_init()
164 if (!obj->resv) in drm_gem_private_object_init()
165 obj->resv = &obj->_resv; in drm_gem_private_object_init()
168 drm_gem_gpuva_init(obj); in drm_gem_private_object_init()
170 drm_vma_node_reset(&obj->vma_node); in drm_gem_private_object_init()
171 INIT_LIST_HEAD(&obj->lru_node); in drm_gem_private_object_init()
181 void drm_gem_private_object_fini(struct drm_gem_object *obj) in drm_gem_private_object_fini() argument
183 WARN_ON(obj->dma_buf); in drm_gem_private_object_fini()
185 dma_resv_fini(&obj->_resv); in drm_gem_private_object_fini()
189 static void drm_gem_object_handle_get(struct drm_gem_object *obj) in drm_gem_object_handle_get() argument
191 struct drm_device *dev = obj->dev; in drm_gem_object_handle_get()
195 if (obj->handle_count++ == 0) in drm_gem_object_handle_get()
196 drm_gem_object_get(obj); in drm_gem_object_handle_get()
210 bool drm_gem_object_handle_get_if_exists_unlocked(struct drm_gem_object *obj) in drm_gem_object_handle_get_if_exists_unlocked() argument
212 struct drm_device *dev = obj->dev; in drm_gem_object_handle_get_if_exists_unlocked()
221 if (!obj->handle_count) in drm_gem_object_handle_get_if_exists_unlocked()
224 drm_gem_object_handle_get(obj); in drm_gem_object_handle_get_if_exists_unlocked()
239 static void drm_gem_object_handle_free(struct drm_gem_object *obj) in drm_gem_object_handle_free() argument
241 struct drm_device *dev = obj->dev; in drm_gem_object_handle_free()
244 if (obj->name) { in drm_gem_object_handle_free()
245 idr_remove(&dev->object_name_idr, obj->name); in drm_gem_object_handle_free()
246 obj->name = 0; in drm_gem_object_handle_free()
250 static void drm_gem_object_exported_dma_buf_free(struct drm_gem_object *obj) in drm_gem_object_exported_dma_buf_free() argument
253 if (obj->dma_buf) { in drm_gem_object_exported_dma_buf_free()
254 dma_buf_put(obj->dma_buf); in drm_gem_object_exported_dma_buf_free()
255 obj->dma_buf = NULL; in drm_gem_object_exported_dma_buf_free()
266 void drm_gem_object_handle_put_unlocked(struct drm_gem_object *obj) in drm_gem_object_handle_put_unlocked() argument
268 struct drm_device *dev = obj->dev; in drm_gem_object_handle_put_unlocked()
271 if (drm_WARN_ON(dev, READ_ONCE(obj->handle_count) == 0)) in drm_gem_object_handle_put_unlocked()
281 if (--obj->handle_count == 0) { in drm_gem_object_handle_put_unlocked()
282 drm_gem_object_handle_free(obj); in drm_gem_object_handle_put_unlocked()
283 drm_gem_object_exported_dma_buf_free(obj); in drm_gem_object_handle_put_unlocked()
289 drm_gem_object_put(obj); in drm_gem_object_handle_put_unlocked()
300 struct drm_gem_object *obj = ptr; in drm_gem_object_release_handle() local
302 if (drm_WARN_ON(obj->dev, !data)) in drm_gem_object_release_handle()
305 if (obj->funcs->close) in drm_gem_object_release_handle()
306 obj->funcs->close(obj, file_priv); in drm_gem_object_release_handle()
309 drm_vma_node_revoke(&obj->vma_node, file_priv); in drm_gem_object_release_handle()
311 drm_gem_object_handle_put_unlocked(obj); in drm_gem_object_release_handle()
328 struct drm_gem_object *obj; in drm_gem_handle_delete() local
333 obj = idr_replace(&filp->object_idr, NULL, handle); in drm_gem_handle_delete()
335 if (IS_ERR_OR_NULL(obj)) in drm_gem_handle_delete()
339 drm_gem_object_release_handle(handle, obj, filp); in drm_gem_handle_delete()
366 struct drm_gem_object *obj; in drm_gem_dumb_map_offset() local
369 obj = drm_gem_object_lookup(file, handle); in drm_gem_dumb_map_offset()
370 if (!obj) in drm_gem_dumb_map_offset()
374 if (drm_gem_is_imported(obj)) { in drm_gem_dumb_map_offset()
379 ret = drm_gem_create_mmap_offset(obj); in drm_gem_dumb_map_offset()
383 *offset = drm_vma_node_offset_addr(&obj->vma_node); in drm_gem_dumb_map_offset()
385 drm_gem_object_put(obj); in drm_gem_dumb_map_offset()
407 struct drm_gem_object *obj, in drm_gem_handle_create_tail() argument
410 struct drm_device *dev = obj->dev; in drm_gem_handle_create_tail()
416 drm_gem_object_handle_get(obj); in drm_gem_handle_create_tail()
436 ret = drm_vma_node_allow(&obj->vma_node, file_priv); in drm_gem_handle_create_tail()
440 if (obj->funcs->open) { in drm_gem_handle_create_tail()
441 ret = obj->funcs->open(obj, file_priv); in drm_gem_handle_create_tail()
448 obj = idr_replace(&file_priv->object_idr, obj, handle); in drm_gem_handle_create_tail()
449 WARN_ON(obj != NULL); in drm_gem_handle_create_tail()
455 drm_vma_node_revoke(&obj->vma_node, file_priv); in drm_gem_handle_create_tail()
461 drm_gem_object_handle_put_unlocked(obj); in drm_gem_handle_create_tail()
479 struct drm_gem_object *obj, in drm_gem_handle_create() argument
482 mutex_lock(&obj->dev->object_name_lock); in drm_gem_handle_create()
484 return drm_gem_handle_create_tail(file_priv, obj, handlep); in drm_gem_handle_create()
500 drm_gem_free_mmap_offset(struct drm_gem_object *obj) in drm_gem_free_mmap_offset() argument
502 struct drm_device *dev = obj->dev; in drm_gem_free_mmap_offset()
504 drm_vma_offset_remove(dev->vma_offset_manager, &obj->vma_node); in drm_gem_free_mmap_offset()
526 drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size) in drm_gem_create_mmap_offset_size() argument
528 struct drm_device *dev = obj->dev; in drm_gem_create_mmap_offset_size()
530 return drm_vma_offset_add(dev->vma_offset_manager, &obj->vma_node, in drm_gem_create_mmap_offset_size()
549 int drm_gem_create_mmap_offset(struct drm_gem_object *obj) in drm_gem_create_mmap_offset() argument
551 return drm_gem_create_mmap_offset_size(obj, obj->size); in drm_gem_create_mmap_offset()
591 struct page **drm_gem_get_pages(struct drm_gem_object *obj) in drm_gem_get_pages() argument
599 if (WARN_ON(!obj->filp)) in drm_gem_get_pages()
603 mapping = obj->filp->f_mapping; in drm_gem_get_pages()
609 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0); in drm_gem_get_pages()
611 npages = obj->size >> PAGE_SHIFT; in drm_gem_get_pages()
666 void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, in drm_gem_put_pages() argument
673 mapping = file_inode(obj->filp)->i_mapping; in drm_gem_put_pages()
680 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0); in drm_gem_put_pages()
682 npages = obj->size >> PAGE_SHIFT; in drm_gem_put_pages()
714 struct drm_gem_object *obj; in objects_lookup() local
720 obj = idr_find(&filp->object_idr, handle[i]); in objects_lookup()
721 if (!obj) { in objects_lookup()
725 drm_gem_object_get(obj); in objects_lookup()
726 objs[i] = obj; in objects_lookup()
802 struct drm_gem_object *obj = NULL; in drm_gem_object_lookup() local
804 objects_lookup(filp, &handle, 1, &obj); in drm_gem_object_lookup()
805 return obj; in drm_gem_object_lookup()
825 struct drm_gem_object *obj; in drm_gem_dma_resv_wait() local
827 obj = drm_gem_object_lookup(filep, handle); in drm_gem_dma_resv_wait()
828 if (!obj) { in drm_gem_dma_resv_wait()
833 ret = dma_resv_wait_timeout(obj->resv, dma_resv_usage_rw(wait_all), in drm_gem_dma_resv_wait()
840 drm_gem_object_put(obj); in drm_gem_dma_resv_wait()
885 struct drm_gem_object *obj; in drm_gem_flink_ioctl() local
891 obj = drm_gem_object_lookup(file_priv, args->handle); in drm_gem_flink_ioctl()
892 if (obj == NULL) in drm_gem_flink_ioctl()
897 if (obj->handle_count == 0) { in drm_gem_flink_ioctl()
902 if (!obj->name) { in drm_gem_flink_ioctl()
903 ret = idr_alloc(&dev->object_name_idr, obj, 1, 0, GFP_KERNEL); in drm_gem_flink_ioctl()
907 obj->name = ret; in drm_gem_flink_ioctl()
910 args->name = (uint64_t) obj->name; in drm_gem_flink_ioctl()
915 drm_gem_object_put(obj); in drm_gem_flink_ioctl()
935 struct drm_gem_object *obj; in drm_gem_open_ioctl() local
943 obj = idr_find(&dev->object_name_idr, (int) args->name); in drm_gem_open_ioctl()
944 if (obj) { in drm_gem_open_ioctl()
945 drm_gem_object_get(obj); in drm_gem_open_ioctl()
952 ret = drm_gem_handle_create_tail(file_priv, obj, &handle); in drm_gem_open_ioctl()
957 args->size = obj->size; in drm_gem_open_ioctl()
960 drm_gem_object_put(obj); in drm_gem_open_ioctl()
1004 drm_gem_object_release(struct drm_gem_object *obj) in drm_gem_object_release() argument
1006 if (obj->filp) in drm_gem_object_release()
1007 fput(obj->filp); in drm_gem_object_release()
1009 drm_gem_private_object_fini(obj); in drm_gem_object_release()
1011 drm_gem_free_mmap_offset(obj); in drm_gem_object_release()
1012 drm_gem_lru_remove(obj); in drm_gem_object_release()
1027 struct drm_gem_object *obj = in drm_gem_object_free() local
1030 if (WARN_ON(!obj->funcs->free)) in drm_gem_object_free()
1033 obj->funcs->free(obj); in drm_gem_object_free()
1046 struct drm_gem_object *obj = vma->vm_private_data; in drm_gem_vm_open() local
1048 drm_gem_object_get(obj); in drm_gem_vm_open()
1061 struct drm_gem_object *obj = vma->vm_private_data; in drm_gem_vm_close() local
1063 drm_gem_object_put(obj); in drm_gem_vm_close()
1091 int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size, in drm_gem_mmap_obj() argument
1106 drm_gem_object_get(obj); in drm_gem_mmap_obj()
1108 vma->vm_private_data = obj; in drm_gem_mmap_obj()
1109 vma->vm_ops = obj->funcs->vm_ops; in drm_gem_mmap_obj()
1111 if (obj->funcs->mmap) { in drm_gem_mmap_obj()
1112 ret = obj->funcs->mmap(obj, vma); in drm_gem_mmap_obj()
1130 drm_gem_object_put(obj); in drm_gem_mmap_obj()
1154 struct drm_gem_object *obj = NULL; in drm_gem_mmap() local
1166 obj = container_of(node, struct drm_gem_object, vma_node); in drm_gem_mmap()
1177 if (!kref_get_unless_zero(&obj->refcount)) in drm_gem_mmap()
1178 obj = NULL; in drm_gem_mmap()
1182 if (!obj) in drm_gem_mmap()
1186 drm_gem_object_put(obj); in drm_gem_mmap()
1190 ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT, in drm_gem_mmap()
1193 drm_gem_object_put(obj); in drm_gem_mmap()
1200 const struct drm_gem_object *obj) in drm_gem_print_info() argument
1202 drm_printf_indent(p, indent, "name=%d\n", obj->name); in drm_gem_print_info()
1204 kref_read(&obj->refcount)); in drm_gem_print_info()
1206 drm_vma_node_start(&obj->vma_node)); in drm_gem_print_info()
1207 drm_printf_indent(p, indent, "size=%zu\n", obj->size); in drm_gem_print_info()
1209 str_yes_no(drm_gem_is_imported(obj))); in drm_gem_print_info()
1211 if (obj->funcs->print_info) in drm_gem_print_info()
1212 obj->funcs->print_info(p, indent, obj); in drm_gem_print_info()
1215 int drm_gem_pin_locked(struct drm_gem_object *obj) in drm_gem_pin_locked() argument
1217 if (obj->funcs->pin) in drm_gem_pin_locked()
1218 return obj->funcs->pin(obj); in drm_gem_pin_locked()
1223 void drm_gem_unpin_locked(struct drm_gem_object *obj) in drm_gem_unpin_locked() argument
1225 if (obj->funcs->unpin) in drm_gem_unpin_locked()
1226 obj->funcs->unpin(obj); in drm_gem_unpin_locked()
1229 int drm_gem_pin(struct drm_gem_object *obj) in drm_gem_pin() argument
1233 dma_resv_lock(obj->resv, NULL); in drm_gem_pin()
1234 ret = drm_gem_pin_locked(obj); in drm_gem_pin()
1235 dma_resv_unlock(obj->resv); in drm_gem_pin()
1240 void drm_gem_unpin(struct drm_gem_object *obj) in drm_gem_unpin() argument
1242 dma_resv_lock(obj->resv, NULL); in drm_gem_unpin()
1243 drm_gem_unpin_locked(obj); in drm_gem_unpin()
1244 dma_resv_unlock(obj->resv); in drm_gem_unpin()
1247 int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map) in drm_gem_vmap() argument
1251 dma_resv_assert_held(obj->resv); in drm_gem_vmap()
1253 if (!obj->funcs->vmap) in drm_gem_vmap()
1256 ret = obj->funcs->vmap(obj, map); in drm_gem_vmap()
1266 void drm_gem_vunmap(struct drm_gem_object *obj, struct iosys_map *map) in drm_gem_vunmap() argument
1268 dma_resv_assert_held(obj->resv); in drm_gem_vunmap()
1273 if (obj->funcs->vunmap) in drm_gem_vunmap()
1274 obj->funcs->vunmap(obj, map); in drm_gem_vunmap()
1281 void drm_gem_lock(struct drm_gem_object *obj) in drm_gem_lock() argument
1283 dma_resv_lock(obj->resv, NULL); in drm_gem_lock()
1287 void drm_gem_unlock(struct drm_gem_object *obj) in drm_gem_unlock() argument
1289 dma_resv_unlock(obj->resv); in drm_gem_unlock()
1293 int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map) in drm_gem_vmap_unlocked() argument
1297 dma_resv_lock(obj->resv, NULL); in drm_gem_vmap_unlocked()
1298 ret = drm_gem_vmap(obj, map); in drm_gem_vmap_unlocked()
1299 dma_resv_unlock(obj->resv); in drm_gem_vmap_unlocked()
1305 void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map) in drm_gem_vunmap_unlocked() argument
1307 dma_resv_lock(obj->resv, NULL); in drm_gem_vunmap_unlocked()
1308 drm_gem_vunmap(obj, map); in drm_gem_vunmap_unlocked()
1309 dma_resv_unlock(obj->resv); in drm_gem_vunmap_unlocked()
1337 struct drm_gem_object *obj = objs[contended]; in drm_gem_lock_reservations() local
1339 ret = dma_resv_lock_slow_interruptible(obj->resv, in drm_gem_lock_reservations()
1407 drm_gem_lru_remove_locked(struct drm_gem_object *obj) in drm_gem_lru_remove_locked() argument
1409 obj->lru->count -= obj->size >> PAGE_SHIFT; in drm_gem_lru_remove_locked()
1410 WARN_ON(obj->lru->count < 0); in drm_gem_lru_remove_locked()
1411 list_del(&obj->lru_node); in drm_gem_lru_remove_locked()
1412 obj->lru = NULL; in drm_gem_lru_remove_locked()
1423 drm_gem_lru_remove(struct drm_gem_object *obj) in drm_gem_lru_remove() argument
1425 struct drm_gem_lru *lru = obj->lru; in drm_gem_lru_remove()
1431 drm_gem_lru_remove_locked(obj); in drm_gem_lru_remove()
1445 drm_gem_lru_move_tail_locked(struct drm_gem_lru *lru, struct drm_gem_object *obj) in drm_gem_lru_move_tail_locked() argument
1449 if (obj->lru) in drm_gem_lru_move_tail_locked()
1450 drm_gem_lru_remove_locked(obj); in drm_gem_lru_move_tail_locked()
1452 lru->count += obj->size >> PAGE_SHIFT; in drm_gem_lru_move_tail_locked()
1453 list_add_tail(&obj->lru_node, &lru->list); in drm_gem_lru_move_tail_locked()
1454 obj->lru = lru; in drm_gem_lru_move_tail_locked()
1469 drm_gem_lru_move_tail(struct drm_gem_lru *lru, struct drm_gem_object *obj) in drm_gem_lru_move_tail() argument
1472 drm_gem_lru_move_tail_locked(lru, obj); in drm_gem_lru_move_tail()
1496 bool (*shrink)(struct drm_gem_object *obj)) in drm_gem_lru_scan() argument
1499 struct drm_gem_object *obj; in drm_gem_lru_scan() local
1507 obj = list_first_entry_or_null(&lru->list, typeof(*obj), lru_node); in drm_gem_lru_scan()
1509 if (!obj) in drm_gem_lru_scan()
1512 drm_gem_lru_move_tail_locked(&still_in_lru, obj); in drm_gem_lru_scan()
1519 if (!kref_get_unless_zero(&obj->refcount)) in drm_gem_lru_scan()
1534 if (!dma_resv_trylock(obj->resv)) { in drm_gem_lru_scan()
1535 *remaining += obj->size >> PAGE_SHIFT; in drm_gem_lru_scan()
1539 if (shrink(obj)) { in drm_gem_lru_scan()
1540 freed += obj->size >> PAGE_SHIFT; in drm_gem_lru_scan()
1547 WARN_ON(obj->lru == &still_in_lru); in drm_gem_lru_scan()
1548 WARN_ON(obj->lru == lru); in drm_gem_lru_scan()
1551 dma_resv_unlock(obj->resv); in drm_gem_lru_scan()
1554 drm_gem_object_put(obj); in drm_gem_lru_scan()
1562 list_for_each_entry (obj, &still_in_lru.list, lru_node) in drm_gem_lru_scan()
1563 obj->lru = lru; in drm_gem_lru_scan()
1577 int drm_gem_evict(struct drm_gem_object *obj) in drm_gem_evict() argument
1579 dma_resv_assert_held(obj->resv); in drm_gem_evict()
1581 if (!dma_resv_test_signaled(obj->resv, DMA_RESV_USAGE_READ)) in drm_gem_evict()
1584 if (obj->funcs->evict) in drm_gem_evict()
1585 return obj->funcs->evict(obj); in drm_gem_evict()