• Home
  • Raw
  • Download

Lines Matching refs:release

62 	struct qxl_release *release;  in qxl_fence_wait()  local
68 release = container_of(fence, struct qxl_release, base); in qxl_fence_wait()
69 have_drawable_releases = release->type == QXL_RELEASE_DRAWABLE; in qxl_fence_wait()
129 struct qxl_release *release; in qxl_release_alloc() local
131 size_t size = sizeof(*release); in qxl_release_alloc()
133 release = kmalloc(size, GFP_KERNEL); in qxl_release_alloc()
134 if (!release) { in qxl_release_alloc()
138 release->base.ops = NULL; in qxl_release_alloc()
139 release->type = type; in qxl_release_alloc()
140 release->release_offset = 0; in qxl_release_alloc()
141 release->surface_release_id = 0; in qxl_release_alloc()
142 INIT_LIST_HEAD(&release->bos); in qxl_release_alloc()
146 handle = idr_alloc(&qdev->release_idr, release, 1, 0, GFP_NOWAIT); in qxl_release_alloc()
147 release->base.seqno = ++qdev->release_seqno; in qxl_release_alloc()
151 kfree(release); in qxl_release_alloc()
155 *ret = release; in qxl_release_alloc()
157 release->id = handle; in qxl_release_alloc()
162 qxl_release_free_list(struct qxl_release *release) in qxl_release_free_list() argument
164 while (!list_empty(&release->bos)) { in qxl_release_free_list()
168 entry = container_of(release->bos.next, in qxl_release_free_list()
179 struct qxl_release *release) in qxl_release_free() argument
181 QXL_INFO(qdev, "release %d, type %d\n", release->id, in qxl_release_free()
182 release->type); in qxl_release_free()
184 if (release->surface_release_id) in qxl_release_free()
185 qxl_surface_id_dealloc(qdev, release->surface_release_id); in qxl_release_free()
188 idr_remove(&qdev->release_idr, release->id); in qxl_release_free()
191 if (release->base.ops) { in qxl_release_free()
192 WARN_ON(list_empty(&release->bos)); in qxl_release_free()
193 qxl_release_free_list(release); in qxl_release_free()
195 fence_signal(&release->base); in qxl_release_free()
196 fence_put(&release->base); in qxl_release_free()
198 qxl_release_free_list(release); in qxl_release_free()
199 kfree(release); in qxl_release_free()
214 int qxl_release_list_add(struct qxl_release *release, struct qxl_bo *bo) in qxl_release_list_add() argument
218 list_for_each_entry(entry, &release->bos, tv.head) { in qxl_release_list_add()
230 list_add_tail(&entry->tv.head, &release->bos); in qxl_release_list_add()
257 int qxl_release_reserve_list(struct qxl_release *release, bool no_intr) in qxl_release_reserve_list() argument
264 if (list_is_singular(&release->bos)) in qxl_release_reserve_list()
267 ret = ttm_eu_reserve_buffers(&release->ticket, &release->bos, !no_intr); in qxl_release_reserve_list()
271 list_for_each_entry(entry, &release->bos, tv.head) { in qxl_release_reserve_list()
276 ttm_eu_backoff_reservation(&release->ticket, &release->bos); in qxl_release_reserve_list()
283 void qxl_release_backoff_reserve_list(struct qxl_release *release) in qxl_release_backoff_reserve_list() argument
287 if (list_is_singular(&release->bos)) in qxl_release_backoff_reserve_list()
290 ttm_eu_backoff_reservation(&release->ticket, &release->bos); in qxl_release_backoff_reserve_list()
297 struct qxl_release **release) in qxl_alloc_surface_release_reserved() argument
306 idr_ret = qxl_release_alloc(qdev, QXL_RELEASE_SURFACE_CMD, release); in qxl_alloc_surface_release_reserved()
311 (*release)->release_offset = create_rel->release_offset + 64; in qxl_alloc_surface_release_reserved()
313 qxl_release_list_add(*release, bo); in qxl_alloc_surface_release_reserved()
315 info = qxl_release_map(qdev, *release); in qxl_alloc_surface_release_reserved()
317 qxl_release_unmap(qdev, *release, info); in qxl_alloc_surface_release_reserved()
324 QXL_RELEASE_SURFACE_CMD, release, NULL); in qxl_alloc_surface_release_reserved()
328 int type, struct qxl_release **release, in qxl_alloc_release_reserved() argument
348 idr_ret = qxl_release_alloc(qdev, type, release); in qxl_alloc_release_reserved()
371 …(*release)->release_offset = qdev->current_release_bo_offset[cur_idx] * release_size_per_bo[cur_id… in qxl_alloc_release_reserved()
379 qxl_release_list_add(*release, bo); in qxl_alloc_release_reserved()
381 info = qxl_release_map(qdev, *release); in qxl_alloc_release_reserved()
383 qxl_release_unmap(qdev, *release, info); in qxl_alloc_release_reserved()
392 struct qxl_release *release; in qxl_release_from_id_locked() local
395 release = idr_find(&qdev->release_idr, id); in qxl_release_from_id_locked()
397 if (!release) { in qxl_release_from_id_locked()
402 return release; in qxl_release_from_id_locked()
406 struct qxl_release *release) in qxl_release_map() argument
410 struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head); in qxl_release_map()
413 ptr = qxl_bo_kmap_atomic_page(qdev, bo, release->release_offset & PAGE_SIZE); in qxl_release_map()
416 info = ptr + (release->release_offset & ~PAGE_SIZE); in qxl_release_map()
421 struct qxl_release *release, in qxl_release_unmap() argument
424 struct qxl_bo_list *entry = list_first_entry(&release->bos, struct qxl_bo_list, tv.head); in qxl_release_unmap()
428 ptr = ((void *)info) - (release->release_offset & ~PAGE_SIZE); in qxl_release_unmap()
432 void qxl_release_fence_buffer_objects(struct qxl_release *release) in qxl_release_fence_buffer_objects() argument
444 if (list_is_singular(&release->bos) || list_empty(&release->bos)) in qxl_release_fence_buffer_objects()
447 bo = list_first_entry(&release->bos, struct ttm_validate_buffer, head)->bo; in qxl_release_fence_buffer_objects()
455 fence_init(&release->base, &qxl_fence_ops, &qdev->release_lock, in qxl_release_fence_buffer_objects()
456 release->id | 0xf0000000, release->base.seqno); in qxl_release_fence_buffer_objects()
457 trace_fence_emit(&release->base); in qxl_release_fence_buffer_objects()
464 list_for_each_entry(entry, &release->bos, head) { in qxl_release_fence_buffer_objects()
468 reservation_object_add_shared_fence(bo->resv, &release->base); in qxl_release_fence_buffer_objects()
473 ww_acquire_fini(&release->ticket); in qxl_release_fence_buffer_objects()