Lines Matching refs:release

54 	return "release";
61 struct qxl_release *release;
67 release = container_of(fence, struct qxl_release, base);
68 have_drawable_releases = release->type == QXL_RELEASE_DRAWABLE;
99 "failed to wait on release %llu after spincount %d\n",
127 struct qxl_release *release;
129 size_t size = sizeof(*release);
131 release = kmalloc(size, GFP_KERNEL);
132 if (!release) {
136 release->base.ops = NULL;
137 release->type = type;
138 release->release_offset = 0;
139 release->surface_release_id = 0;
140 INIT_LIST_HEAD(&release->bos);
144 handle = idr_alloc(&qdev->release_idr, release, 1, 0, GFP_NOWAIT);
145 release->base.seqno = ++qdev->release_seqno;
149 kfree(release);
153 *ret = release;
154 DRM_DEBUG_DRIVER("allocated release %d\n", handle);
155 release->id = handle;
160 qxl_release_free_list(struct qxl_release *release)
162 while (!list_empty(&release->bos)) {
166 entry = container_of(release->bos.next,
173 release->release_bo = NULL;
178 struct qxl_release *release)
180 DRM_DEBUG_DRIVER("release %d, type %d\n", release->id, release->type);
182 if (release->surface_release_id)
183 qxl_surface_id_dealloc(qdev, release->surface_release_id);
186 idr_remove(&qdev->release_idr, release->id);
189 if (release->base.ops) {
190 WARN_ON(list_empty(&release->bos));
191 qxl_release_free_list(release);
193 dma_fence_signal(&release->base);
194 dma_fence_put(&release->base);
196 qxl_release_free_list(release);
197 kfree(release);
211 int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo)
215 list_for_each_entry(entry, &release->bos, tv.head) {
227 list_add_tail(&entry->tv.head, &release->bos);
254 int qxl_release_reserve_list(struct qxl_release *release, bool no_intr)
259 /* if only one object on the release its the release itself
261 if (list_is_singular(&release->bos))
264 ret = ttm_eu_reserve_buffers(&release->ticket, &release->bos,
269 list_for_each_entry(entry, &release->bos, tv.head) {
274 ttm_eu_backoff_reservation(&release->ticket, &release->bos);
281 void qxl_release_backoff_reserve_list(struct qxl_release *release)
283 /* if only one object on the release its the release itself
285 if (list_is_singular(&release->bos))
288 ttm_eu_backoff_reservation(&release->ticket, &release->bos);
294 struct qxl_release **release)
301 /* stash the release after the create command */
302 idr_ret = qxl_release_alloc(qdev, QXL_RELEASE_SURFACE_CMD, release);
307 (*release)->release_bo = bo;
308 (*release)->release_offset = create_rel->release_offset + 64;
310 qxl_release_list_add(*release, bo);
312 info = qxl_release_map(qdev, *release);
314 qxl_release_unmap(qdev, *release, info);
319 QXL_RELEASE_SURFACE_CMD, release, NULL);
323 int type, struct qxl_release **release,
348 idr_ret = qxl_release_alloc(qdev, type, release);
370 qxl_release_free(qdev, *release);
377 (*release)->release_bo = bo;
378 (*release)->release_offset = qdev->current_release_bo_offset[cur_idx] * release_size_per_bo[cur_idx];
390 ret = qxl_release_list_add(*release, bo);
393 qxl_release_free(qdev, *release);
397 info = qxl_release_map(qdev, *release);
399 qxl_release_unmap(qdev, *release, info);
407 struct qxl_release *release;
410 release = idr_find(&qdev->release_idr, id);
412 if (!release) {
417 return release;
421 struct qxl_release *release)
425 struct qxl_bo *bo = release->release_bo;
427 ptr = qxl_bo_kmap_atomic_page(qdev, bo, release->release_offset & PAGE_MASK);
430 info = ptr + (release->release_offset & ~PAGE_MASK);
435 struct qxl_release *release,
438 struct qxl_bo *bo = release->release_bo;
441 ptr = ((void *)info) - (release->release_offset & ~PAGE_MASK);
445 void qxl_release_fence_buffer_objects(struct qxl_release *release)
452 /* if only one object on the release its the release itself
454 if (list_is_singular(&release->bos) || list_empty(&release->bos))
457 bo = list_first_entry(&release->bos, struct ttm_validate_buffer, head)->bo;
465 dma_fence_init(&release->base, &qxl_fence_ops, &qdev->release_lock,
466 release->id | 0xf0000000, release->base.seqno);
467 trace_dma_fence_emit(&release->base);
469 list_for_each_entry(entry, &release->bos, head) {
472 dma_resv_add_fence(bo->base.resv, &release->base,
477 ww_acquire_fini(&release->ticket);