Lines Matching defs:obj
117 * @obj: drm_gem_object to initialize
124 struct drm_gem_object *obj, size_t size)
128 drm_gem_private_object_init(dev, obj, size);
134 obj->filp = filp;
143 * @obj: drm_gem_object to initialize
151 struct drm_gem_object *obj, size_t size)
155 obj->dev = dev;
156 obj->filp = NULL;
158 kref_init(&obj->refcount);
159 obj->handle_count = 0;
160 obj->size = size;
161 dma_resv_init(&obj->_resv);
162 if (!obj->resv)
163 obj->resv = &obj->_resv;
165 drm_vma_node_reset(&obj->vma_node);
171 * @obj: GEM object to clean up.
179 static void drm_gem_object_handle_free(struct drm_gem_object *obj)
181 struct drm_device *dev = obj->dev;
184 if (obj->name) {
185 idr_remove(&dev->object_name_idr, obj->name);
186 obj->name = 0;
190 static void drm_gem_object_exported_dma_buf_free(struct drm_gem_object *obj)
193 if (obj->dma_buf) {
194 dma_buf_put(obj->dma_buf);
195 obj->dma_buf = NULL;
200 drm_gem_object_handle_put_unlocked(struct drm_gem_object *obj)
202 struct drm_device *dev = obj->dev;
205 if (WARN_ON(READ_ONCE(obj->handle_count) == 0))
215 if (--obj->handle_count == 0) {
216 drm_gem_object_handle_free(obj);
217 drm_gem_object_exported_dma_buf_free(obj);
223 drm_gem_object_put(obj);
234 struct drm_gem_object *obj = ptr;
235 struct drm_device *dev = obj->dev;
237 if (obj->funcs && obj->funcs->close)
238 obj->funcs->close(obj, file_priv);
240 dev->driver->gem_close_object(obj, file_priv);
243 drm_vma_node_revoke(&obj->vma_node, file_priv);
245 drm_gem_object_handle_put_unlocked(obj);
262 struct drm_gem_object *obj;
267 obj = idr_replace(&filp->object_idr, NULL, handle);
269 if (IS_ERR_OR_NULL(obj))
273 drm_gem_object_release_handle(handle, obj, filp);
300 struct drm_gem_object *obj;
303 obj = drm_gem_object_lookup(file, handle);
304 if (!obj)
308 if (obj->import_attach) {
313 ret = drm_gem_create_mmap_offset(obj);
317 *offset = drm_vma_node_offset_addr(&obj->vma_node);
319 drm_gem_object_put(obj);
345 * @obj: object to register
358 struct drm_gem_object *obj,
361 struct drm_device *dev = obj->dev;
366 if (obj->handle_count++ == 0)
367 drm_gem_object_get(obj);
376 ret = idr_alloc(&file_priv->object_idr, obj, 1, 0, GFP_NOWAIT);
387 ret = drm_vma_node_allow(&obj->vma_node, file_priv);
391 if (obj->funcs && obj->funcs->open) {
392 ret = obj->funcs->open(obj, file_priv);
396 ret = dev->driver->gem_open_object(obj, file_priv);
405 drm_vma_node_revoke(&obj->vma_node, file_priv);
411 drm_gem_object_handle_put_unlocked(obj);
418 * @obj: object to register
425 * Since this publishes @obj to userspace it must be fully set up by this point,
429 struct drm_gem_object *obj,
432 mutex_lock(&obj->dev->object_name_lock);
434 return drm_gem_handle_create_tail(file_priv, obj, handlep);
441 * @obj: obj in question
450 drm_gem_free_mmap_offset(struct drm_gem_object *obj)
452 struct drm_device *dev = obj->dev;
454 drm_vma_offset_remove(dev->vma_offset_manager, &obj->vma_node);
460 * @obj: obj in question
468 * This routine allocates and attaches a fake offset for @obj, in cases where
476 drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size)
478 struct drm_device *dev = obj->dev;
480 return drm_vma_offset_add(dev->vma_offset_manager, &obj->vma_node,
487 * @obj: obj in question
494 * This routine allocates and attaches a fake offset for @obj.
496 * Drivers can call drm_gem_free_mmap_offset() before freeing @obj to release
499 int drm_gem_create_mmap_offset(struct drm_gem_object *obj)
501 return drm_gem_create_mmap_offset_size(obj, obj->size);
519 * @obj: obj in question
541 struct page **drm_gem_get_pages(struct drm_gem_object *obj)
549 if (WARN_ON(!obj->filp))
553 mapping = obj->filp->f_mapping;
559 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0);
561 npages = obj->size >> PAGE_SHIFT;
603 * @obj: obj in question
608 void drm_gem_put_pages(struct drm_gem_object *obj, struct page **pages,
615 mapping = file_inode(obj->filp)->i_mapping;
622 WARN_ON((obj->size & (PAGE_SIZE - 1)) != 0);
624 npages = obj->size >> PAGE_SHIFT;
652 struct drm_gem_object *obj;
658 obj = idr_find(&filp->object_idr, handle[i]);
659 if (!obj) {
663 drm_gem_object_get(obj);
664 objs[i] = obj;
742 struct drm_gem_object *obj = NULL;
744 objects_lookup(filp, &handle, 1, &obj);
745 return obj;
766 struct drm_gem_object *obj;
768 obj = drm_gem_object_lookup(filep, handle);
769 if (!obj) {
774 ret = dma_resv_wait_timeout_rcu(obj->resv, wait_all,
781 drm_gem_object_put(obj);
826 struct drm_gem_object *obj;
832 obj = drm_gem_object_lookup(file_priv, args->handle);
833 if (obj == NULL)
838 if (obj->handle_count == 0) {
843 if (!obj->name) {
844 ret = idr_alloc(&dev->object_name_idr, obj, 1, 0, GFP_KERNEL);
848 obj->name = ret;
851 args->name = (uint64_t) obj->name;
856 drm_gem_object_put(obj);
876 struct drm_gem_object *obj;
884 obj = idr_find(&dev->object_name_idr, (int) args->name);
885 if (obj) {
886 drm_gem_object_get(obj);
893 ret = drm_gem_handle_create_tail(file_priv, obj, &handle);
898 args->size = obj->size;
901 drm_gem_object_put(obj);
939 * @obj: GEM buffer object
941 * This releases any structures and resources used by @obj and is the invers of
945 drm_gem_object_release(struct drm_gem_object *obj)
947 WARN_ON(obj->dma_buf);
949 if (obj->filp)
950 fput(obj->filp);
952 dma_resv_fini(&obj->_resv);
953 drm_gem_free_mmap_offset(obj);
968 struct drm_gem_object *obj =
970 struct drm_device *dev = obj->dev;
972 if (obj->funcs)
973 obj->funcs->free(obj);
975 dev->driver->gem_free_object_unlocked(obj);
981 * @obj: GEM buffer object
983 * This releases a reference to @obj. Callers must hold the
991 drm_gem_object_put_locked(struct drm_gem_object *obj)
993 if (obj) {
994 WARN_ON(!mutex_is_locked(&obj->dev->struct_mutex));
996 kref_put(&obj->refcount, drm_gem_object_free);
1010 struct drm_gem_object *obj = vma->vm_private_data;
1012 drm_gem_object_get(obj);
1025 struct drm_gem_object *obj = vma->vm_private_data;
1027 drm_gem_object_put(obj);
1033 * @obj: the GEM object to map
1055 int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
1058 struct drm_device *dev = obj->dev;
1071 drm_gem_object_get(obj);
1073 vma->vm_private_data = obj;
1075 if (obj->funcs && obj->funcs->mmap) {
1076 ret = obj->funcs->mmap(obj, vma);
1078 drm_gem_object_put(obj);
1083 if (obj->funcs && obj->funcs->vm_ops)
1084 vma->vm_ops = obj->funcs->vm_ops;
1088 drm_gem_object_put(obj);
1120 struct drm_gem_object *obj = NULL;
1132 obj = container_of(node, struct drm_gem_object, vma_node);
1143 if (!kref_get_unless_zero(&obj->refcount))
1144 obj = NULL;
1148 if (!obj)
1152 drm_gem_object_put(obj);
1158 drm_gem_object_put(obj);
1165 ret = drm_gem_mmap_obj(obj, drm_vma_node_size(node) << PAGE_SHIFT,
1168 drm_gem_object_put(obj);
1175 const struct drm_gem_object *obj)
1177 drm_printf_indent(p, indent, "name=%d\n", obj->name);
1179 kref_read(&obj->refcount));
1181 drm_vma_node_start(&obj->vma_node));
1182 drm_printf_indent(p, indent, "size=%zu\n", obj->size);
1184 obj->import_attach ? "yes" : "no");
1186 if (obj->funcs && obj->funcs->print_info)
1187 obj->funcs->print_info(p, indent, obj);
1190 int drm_gem_pin(struct drm_gem_object *obj)
1192 if (obj->funcs && obj->funcs->pin)
1193 return obj->funcs->pin(obj);
1194 else if (obj->dev->driver->gem_prime_pin)
1195 return obj->dev->driver->gem_prime_pin(obj);
1200 void drm_gem_unpin(struct drm_gem_object *obj)
1202 if (obj->funcs && obj->funcs->unpin)
1203 obj->funcs->unpin(obj);
1204 else if (obj->dev->driver->gem_prime_unpin)
1205 obj->dev->driver->gem_prime_unpin(obj);
1208 void *drm_gem_vmap(struct drm_gem_object *obj)
1212 if (obj->funcs && obj->funcs->vmap)
1213 vaddr = obj->funcs->vmap(obj);
1214 else if (obj->dev->driver->gem_prime_vmap)
1215 vaddr = obj->dev->driver->gem_prime_vmap(obj);
1225 void drm_gem_vunmap(struct drm_gem_object *obj, void *vaddr)
1230 if (obj->funcs && obj->funcs->vunmap)
1231 obj->funcs->vunmap(obj, vaddr);
1232 else if (obj->dev->driver->gem_prime_vunmap)
1233 obj->dev->driver->gem_prime_vunmap(obj, vaddr);
1260 struct drm_gem_object *obj = objs[contended];
1262 ret = dma_resv_lock_slow_interruptible(obj->resv,
1370 * @obj: the gem object to add new dependencies from.
1375 struct drm_gem_object *obj,
1384 dma_resv_get_excl_rcu(obj->resv);
1389 ret = dma_resv_get_fences_rcu(obj->resv, NULL,