Lines Matching refs:obj
131 * @obj: drm_gem_object to initialize
138 struct drm_gem_object *obj, size_t size)
144 drm_gem_private_object_init(dev, obj, size);
151 obj->filp = uao_create(MAX(size, PAGE_SIZE), 0);
157 rw_obj_hold(obj->filp->vmobjlock);
158 uvm_obj_setlock(&obj->gemo_uvmobj, obj->filp->vmobjlock);
164 obj->filp = filp;
174 * @obj: drm_gem_object to initialize
182 struct drm_gem_object *obj, size_t size)
186 obj->dev = dev;
188 obj->filp = NULL;
191 uvm_obj_init(&obj->gemo_uvmobj, dev->driver->gem_uvm_ops,
194 obj->filp = NULL;
197 kref_init(&obj->refcount);
198 obj->handle_count = 0;
199 obj->size = size;
200 dma_resv_init(&obj->_resv);
201 if (!obj->resv)
202 obj->resv = &obj->_resv;
205 drm_vma_node_init(&obj->vma_node);
207 drm_vma_node_reset(&obj->vma_node);
213 drm_gem_remove_prime_handles(struct drm_gem_object *obj, struct drm_file *filp)
216 * Note: obj->dma_buf can't disappear as long as we still hold a
217 * handle reference in obj->handle_count.
220 if (obj->dma_buf) {
222 obj->dma_buf);
229 * @obj: GEM object to clean up.
237 static void drm_gem_object_handle_free(struct drm_gem_object *obj)
239 struct drm_device *dev = obj->dev;
242 if (obj->name) {
243 idr_remove(&dev->object_name_idr, obj->name);
244 obj->name = 0;
248 static void drm_gem_object_exported_dma_buf_free(struct drm_gem_object *obj)
252 if (obj->dma_buf) {
253 dma_buf_put(obj->dma_buf);
254 obj->dma_buf = NULL;
260 drm_gem_object_handle_put_unlocked(struct drm_gem_object *obj)
262 struct drm_device *dev = obj->dev;
265 if (WARN_ON(obj->handle_count == 0))
275 if (--obj->handle_count == 0) {
276 drm_gem_object_handle_free(obj);
277 drm_gem_object_exported_dma_buf_free(obj);
283 drm_gem_object_put_unlocked(obj);
294 struct drm_gem_object *obj = ptr;
295 struct drm_device *dev = obj->dev;
297 if (obj->funcs && obj->funcs->close)
298 obj->funcs->close(obj, file_priv);
300 dev->driver->gem_close_object(obj, file_priv);
302 drm_gem_remove_prime_handles(obj, file_priv);
303 drm_vma_node_revoke(&obj->vma_node, file_priv);
305 drm_gem_object_handle_put_unlocked(obj);
322 struct drm_gem_object *obj;
327 obj = idr_replace(&filp->object_idr, NULL, handle);
329 if (IS_ERR_OR_NULL(obj))
333 drm_gem_object_release_handle(handle, obj, filp);
360 struct drm_gem_object *obj;
363 obj = drm_gem_object_lookup(file, handle);
364 if (!obj)
368 if (obj->import_attach) {
373 ret = drm_gem_create_mmap_offset(obj);
377 *offset = drm_vma_node_offset_addr(&obj->vma_node);
379 drm_gem_object_put_unlocked(obj);
405 * @obj: object to register
418 struct drm_gem_object *obj,
421 struct drm_device *dev = obj->dev;
426 if (obj->handle_count++ == 0)
427 drm_gem_object_get(obj);
436 ret = idr_alloc(&file_priv->object_idr, obj, 1, 0, GFP_NOWAIT);
447 ret = drm_vma_node_allow(&obj->vma_node, file_priv);
451 if (obj->funcs && obj->funcs->open) {
452 ret = obj->funcs->open(obj, file_priv);
456 ret = dev->driver->gem_open_object(obj, file_priv);
465 drm_vma_node_revoke(&obj->vma_node, file_priv);
471 drm_gem_object_handle_put_unlocked(obj);
478 * @obj: object to register
485 * Since this publishes @obj to userspace it must be fully set up by this point,
489 struct drm_gem_object *obj,
492 mutex_lock(&obj->dev->object_name_lock);
494 return drm_gem_handle_create_tail(file_priv, obj, handlep);
501 * @obj: obj in question
510 drm_gem_free_mmap_offset(struct drm_gem_object *obj)
512 struct drm_device *dev = obj->dev;
514 drm_vma_offset_remove(dev->vma_offset_manager, &obj->vma_node);
520 * @obj: obj in question
528 * This routine allocates and attaches a fake offset for @obj, in cases where
536 drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size)
538 struct drm_device *dev = obj->dev;
540 return drm_vma_offset_add(dev->vma_offset_manager, &obj->vma_node,
547 * @obj: obj in question
554 * This routine allocates and attaches a fake offset for @obj.
556 obj to release
559 int drm_gem_create_mmap_offset(struct drm_gem_object *obj)
561 return drm_gem_create_mmap_offset_size(obj, obj->size);
581 * @obj: obj in question
601 drm_gem_get_pages(struct drm_gem_object *obj)
608 KASSERT((obj->size & (PAGE_SIZE - 1)) == 0);
610 npages = obj->size >> PAGE_SHIFT;
618 ret = -uvm_obj_wirepages(obj->filp, 0, obj->size, NULL);
622 rw_enter(obj->filp->vmobjlock, RW_READER);
624 vm_page = uvm_pagelookup(obj->filp, ptoa(i));
627 rw_exit(obj->filp->vmobjlock);
635 struct page **drm_gem_get_pages(struct drm_gem_object *obj)
643 mapping = obj->filp->f_mapping;
649 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0);
651 npages = obj->size >> PAGE_SHIFT;
694 * @obj: obj in question
701 drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages, bool dirty,
706 for (i = 0; i < (obj->size >> PAGE_SHIFT); i++) {
708 rw_enter(obj->filp->vmobjlock, RW_WRITER);
711 rw_exit(obj->filp->vmobjlock);
715 uvm_obj_unwirepages(obj->filp, 0, obj->size);
718 void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages,
725 mapping = file_inode(obj->filp)->i_mapping;
732 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0);
734 npages = obj->size >> PAGE_SHIFT;
763 struct drm_gem_object *obj;
769 obj = idr_find(&filp->object_idr, handle[i]);
770 if (!obj) {
774 drm_gem_object_get(obj);
775 objs[i] = obj;
853 struct drm_gem_object *obj = NULL;
855 objects_lookup(filp, &handle, 1, &obj);
856 return obj;
877 struct drm_gem_object *obj;
879 obj = drm_gem_object_lookup(filep, handle);
880 if (!obj) {
885 ret = dma_resv_wait_timeout_rcu(obj->resv, wait_all,
892 drm_gem_object_put_unlocked(obj);
937 struct drm_gem_object *obj;
943 obj = drm_gem_object_lookup(file_priv, args->handle);
944 if (obj == NULL)
950 if (obj->handle_count == 0) {
955 if (!obj->name) {
956 ret = idr_alloc(&dev->object_name_idr, obj, 1, 0, GFP_KERNEL);
960 obj->name = ret;
963 args->name = (uint64_t) obj->name;
969 drm_gem_object_put_unlocked(obj);
989 struct drm_gem_object *obj;
997 obj = idr_find(&dev->object_name_idr, (int) args->name);
998 if (obj) {
999 drm_gem_object_get(obj);
1006 ret = drm_gem_handle_create_tail(file_priv, obj, &handle);
1007 drm_gem_object_put_unlocked(obj);
1012 args->size = obj->size;
1054 * @obj: GEM buffer object
1056 * This releases any structures and resources used by @obj and is the invers of
1060 drm_gem_object_release(struct drm_gem_object *obj)
1063 WARN_ON(obj->dma_buf);
1067 if (obj->filp)
1068 uao_detach(obj->filp);
1069 uvm_obj_destroy(&obj->gemo_uvmobj, /*free lock*/true);
1071 if (obj->filp)
1072 fput(obj->filp);
1075 dma_resv_fini(&obj->_resv);
1076 drm_gem_free_mmap_offset(obj);
1078 drm_vma_node_destroy(&obj->vma_node);
1095 struct drm_gem_object *obj =
1097 struct drm_device *dev = obj->dev;
1099 if (obj->funcs) {
1100 obj->funcs->free(obj);
1102 dev->driver->gem_free_object_unlocked(obj);
1106 dev->driver->gem_free_object(obj);
1113 * @obj: GEM buffer object
1115 * This releases a reference to @obj. Callers must not hold the
1121 drm_gem_object_put_unlocked(struct drm_gem_object *obj)
1125 if (!obj)
1128 dev = obj->dev;
1132 if (kref_put_mutex(&obj->refcount, drm_gem_object_free,
1136 kref_put(&obj->refcount, drm_gem_object_free);
1143 * @obj: GEM buffer object
1145 * This releases a reference to @obj. Callers must hold the
1153 drm_gem_object_put(struct drm_gem_object *obj)
1155 if (obj) {
1156 WARN_ON(!mutex_is_locked(&obj->dev->struct_mutex));
1158 kref_put(&obj->refcount, drm_gem_object_free);
1173 struct drm_gem_object *obj = vma->vm_private_data;
1175 drm_gem_object_get(obj);
1188 struct drm_gem_object *obj = vma->vm_private_data;
1190 drm_gem_object_put_unlocked(obj);
1196 * @obj: the GEM object to map
1218 int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
1221 struct drm_device *dev = obj->dev;
1234 drm_gem_object_get(obj);
1236 if (obj->funcs && obj->funcs->mmap) {
1237 ret = obj->funcs->mmap(obj, vma);
1239 drm_gem_object_put_unlocked(obj);
1244 if (obj->funcs && obj->funcs->vm_ops)
1245 vma->vm_ops = obj->funcs->vm_ops;
1249 drm_gem_object_put_unlocked(obj);
1258 vma->vm_private_data = obj;
1283 struct drm_gem_object *obj = NULL;
1295 obj = container_of(node, struct drm_gem_object, vma_node);
1306 if (!kref_get_unless_zero(&obj->refcount))
1307 obj = NULL;
1311 if (!obj)
1315 drm_gem_object_put_unlocked(obj);
1321 drm_gem_object_put_unlocked(obj);
1328 ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT,
1331 drm_gem_object_put_unlocked(obj);
1339 const struct drm_gem_object *obj)
1341 drm_printf_indent(p, indent, "name=%d\n", obj->name);
1343 kref_read(&obj->refcount));
1345 drm_vma_node_start(&obj->vma_node));
1346 drm_printf_indent(p, indent, "size=%zu\n", obj->size);
1348 obj->import_attach ? "yes" : "no");
1350 if (obj->funcs && obj->funcs->print_info)
1351 obj->funcs->print_info(p, indent, obj);
1352 else if (obj->dev->driver->gem_print_info)
1353 obj->dev->driver->gem_print_info(p, indent, obj);
1356 int drm_gem_pin(struct drm_gem_object *obj)
1358 if (obj->funcs && obj->funcs->pin)
1359 return obj->funcs->pin(obj);
1360 else if (obj->dev->driver->gem_prime_pin)
1361 return obj->dev->driver->gem_prime_pin(obj);
1366 void drm_gem_unpin(struct drm_gem_object *obj)
1368 if (obj->funcs && obj->funcs->unpin)
1369 obj->funcs->unpin(obj);
1370 else if (obj->dev->driver->gem_prime_unpin)
1371 obj->dev->driver->gem_prime_unpin(obj);
1374 void *drm_gem_vmap(struct drm_gem_object *obj)
1378 if (obj->funcs && obj->funcs->vmap)
1379 vaddr = obj->funcs->vmap(obj);
1380 else if (obj->dev->driver->gem_prime_vmap)
1381 vaddr = obj->dev->driver->gem_prime_vmap(obj);
1391 void drm_gem_vunmap(struct drm_gem_object *obj, void *vaddr)
1396 if (obj->funcs && obj->funcs->vunmap)
1397 obj->funcs->vunmap(obj, vaddr);
1398 else if (obj->dev->driver->gem_prime_vunmap)
1399 obj->dev->driver->gem_prime_vunmap(obj, vaddr);
1426 struct drm_gem_object *obj = objs[contended];
1428 ret = dma_resv_lock_slow_interruptible(obj->resv,
1536 * @obj: the gem object to add new dependencies from.
1541 struct drm_gem_object *obj,
1550 dma_resv_get_excl_rcu(obj->resv);
1555 ret = dma_resv_get_fences_rcu(obj->resv, NULL,