Lines Matching full:release

54 	return "release";  in qxl_get_timeline_name()
87 struct qxl_release *release; in qxl_release_alloc() local
89 size_t size = sizeof(*release); in qxl_release_alloc()
91 release = kmalloc(size, GFP_KERNEL); in qxl_release_alloc()
92 if (!release) { in qxl_release_alloc()
96 release->base.ops = NULL; in qxl_release_alloc()
97 release->type = type; in qxl_release_alloc()
98 release->release_offset = 0; in qxl_release_alloc()
99 release->surface_release_id = 0; in qxl_release_alloc()
100 INIT_LIST_HEAD(&release->bos); in qxl_release_alloc()
104 handle = idr_alloc(&qdev->release_idr, release, 1, 0, GFP_NOWAIT); in qxl_release_alloc()
105 release->base.seqno = ++qdev->release_seqno; in qxl_release_alloc()
109 kfree(release); in qxl_release_alloc()
113 *ret = release; in qxl_release_alloc()
114 DRM_DEBUG_DRIVER("allocated release %d\n", handle); in qxl_release_alloc()
115 release->id = handle; in qxl_release_alloc()
120 qxl_release_free_list(struct qxl_release *release) in qxl_release_free_list() argument
122 while (!list_empty(&release->bos)) { in qxl_release_free_list()
125 entry = container_of(release->bos.next, in qxl_release_free_list()
131 release->release_bo = NULL; in qxl_release_free_list()
136 struct qxl_release *release) in qxl_release_free() argument
138 DRM_DEBUG_DRIVER("release %d, type %d\n", release->id, release->type); in qxl_release_free()
140 if (release->surface_release_id) in qxl_release_free()
141 qxl_surface_id_dealloc(qdev, release->surface_release_id); in qxl_release_free()
144 idr_remove(&qdev->release_idr, release->id); in qxl_release_free()
147 if (release->base.ops) { in qxl_release_free()
148 WARN_ON(list_empty(&release->bos)); in qxl_release_free()
149 qxl_release_free_list(release); in qxl_release_free()
151 dma_fence_signal(&release->base); in qxl_release_free()
152 dma_fence_put(&release->base); in qxl_release_free()
154 qxl_release_free_list(release); in qxl_release_free()
155 kfree(release); in qxl_release_free()
169 int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo) in qxl_release_list_add() argument
173 list_for_each_entry(entry, &release->bos, list) { in qxl_release_list_add()
184 list_add_tail(&entry->list, &release->bos); in qxl_release_list_add()
211 int qxl_release_reserve_list(struct qxl_release *release, bool no_intr) in qxl_release_reserve_list() argument
216 /* if only one object on the release its the release itself in qxl_release_reserve_list()
218 if (list_is_singular(&release->bos)) in qxl_release_reserve_list()
221 drm_exec_init(&release->exec, no_intr ? 0 : in qxl_release_reserve_list()
223 drm_exec_until_all_locked(&release->exec) { in qxl_release_reserve_list()
224 list_for_each_entry(entry, &release->bos, list) { in qxl_release_reserve_list()
225 ret = drm_exec_prepare_obj(&release->exec, in qxl_release_reserve_list()
228 drm_exec_retry_on_contention(&release->exec); in qxl_release_reserve_list()
234 list_for_each_entry(entry, &release->bos, list) { in qxl_release_reserve_list()
241 drm_exec_fini(&release->exec); in qxl_release_reserve_list()
245 void qxl_release_backoff_reserve_list(struct qxl_release *release) in qxl_release_backoff_reserve_list() argument
247 /* if only one object on the release its the release itself in qxl_release_backoff_reserve_list()
249 if (list_is_singular(&release->bos)) in qxl_release_backoff_reserve_list()
252 drm_exec_fini(&release->exec); in qxl_release_backoff_reserve_list()
258 struct qxl_release **release) in qxl_alloc_surface_release_reserved() argument
265 /* stash the release after the create command */ in qxl_alloc_surface_release_reserved()
266 idr_ret = qxl_release_alloc(qdev, QXL_RELEASE_SURFACE_CMD, release); in qxl_alloc_surface_release_reserved()
271 (*release)->release_bo = bo; in qxl_alloc_surface_release_reserved()
272 (*release)->release_offset = create_rel->release_offset + 64; in qxl_alloc_surface_release_reserved()
274 qxl_release_list_add(*release, bo); in qxl_alloc_surface_release_reserved()
276 info = qxl_release_map(qdev, *release); in qxl_alloc_surface_release_reserved()
278 qxl_release_unmap(qdev, *release, info); in qxl_alloc_surface_release_reserved()
283 QXL_RELEASE_SURFACE_CMD, release, NULL); in qxl_alloc_surface_release_reserved()
287 int type, struct qxl_release **release, in qxl_alloc_release_reserved() argument
312 idr_ret = qxl_release_alloc(qdev, type, release); in qxl_alloc_release_reserved()
334 qxl_release_free(qdev, *release); in qxl_alloc_release_reserved()
341 (*release)->release_bo = bo; in qxl_alloc_release_reserved()
342 …(*release)->release_offset = qdev->current_release_bo_offset[cur_idx] * release_size_per_bo[cur_id… in qxl_alloc_release_reserved()
354 ret = qxl_release_list_add(*release, bo); in qxl_alloc_release_reserved()
357 qxl_release_free(qdev, *release); in qxl_alloc_release_reserved()
361 info = qxl_release_map(qdev, *release); in qxl_alloc_release_reserved()
363 qxl_release_unmap(qdev, *release, info); in qxl_alloc_release_reserved()
371 struct qxl_release *release; in qxl_release_from_id_locked() local
374 release = idr_find(&qdev->release_idr, id); in qxl_release_from_id_locked()
376 if (!release) { in qxl_release_from_id_locked()
381 return release; in qxl_release_from_id_locked()
385 struct qxl_release *release) in qxl_release_map() argument
389 struct qxl_bo *bo = release->release_bo; in qxl_release_map()
391 ptr = qxl_bo_kmap_atomic_page(qdev, bo, release->release_offset & PAGE_MASK); in qxl_release_map()
394 info = ptr + (release->release_offset & ~PAGE_MASK); in qxl_release_map()
399 struct qxl_release *release, in qxl_release_unmap() argument
402 struct qxl_bo *bo = release->release_bo; in qxl_release_unmap()
405 ptr = ((void *)info) - (release->release_offset & ~PAGE_MASK); in qxl_release_unmap()
409 void qxl_release_fence_buffer_objects(struct qxl_release *release) in qxl_release_fence_buffer_objects() argument
416 /* if only one object on the release its the release itself in qxl_release_fence_buffer_objects()
418 if (list_is_singular(&release->bos) || list_empty(&release->bos)) in qxl_release_fence_buffer_objects()
421 bo = list_first_entry(&release->bos, struct qxl_bo_list, list)->bo; in qxl_release_fence_buffer_objects()
429 dma_fence_init(&release->base, &qxl_fence_ops, &qdev->release_lock, in qxl_release_fence_buffer_objects()
430 release->id | 0xf0000000, release->base.seqno); in qxl_release_fence_buffer_objects()
431 trace_dma_fence_emit(&release->base); in qxl_release_fence_buffer_objects()
433 list_for_each_entry(entry, &release->bos, list) { in qxl_release_fence_buffer_objects()
436 dma_resv_add_fence(bo->tbo.base.resv, &release->base, in qxl_release_fence_buffer_objects()
440 drm_exec_fini(&release->exec); in qxl_release_fence_buffer_objects()