Lines Matching refs:ctx
90 * @ctx: The validation context
102 void *vmw_validation_mem_alloc(struct vmw_validation_context *ctx,
111 if (ctx->mem_size_left < size) {
114 if (ctx->vm && ctx->vm_size_left < PAGE_SIZE) {
115 int ret = ctx->vm->reserve_mem(ctx->vm, ctx->vm->gran);
120 ctx->vm_size_left += ctx->vm->gran;
121 ctx->total_mem += ctx->vm->gran;
128 if (ctx->vm)
129 ctx->vm_size_left -= PAGE_SIZE;
131 list_add_tail(&page->lru, &ctx->page_list);
132 ctx->page_address = page_address(page);
133 ctx->mem_size_left = PAGE_SIZE;
136 addr = (void *) (ctx->page_address + (PAGE_SIZE - ctx->mem_size_left));
137 ctx->mem_size_left -= size;
145 * @ctx: The validation context
150 static void vmw_validation_mem_free(struct vmw_validation_context *ctx)
154 list_for_each_entry_safe(entry, next, &ctx->page_list, lru) {
159 ctx->mem_size_left = 0;
160 if (ctx->vm && ctx->total_mem) {
161 ctx->vm->unreserve_mem(ctx->vm, ctx->total_mem);
162 ctx->total_mem = 0;
163 ctx->vm_size_left = 0;
170 * @ctx: The validation context to search.
177 vmw_validation_find_bo_dup(struct vmw_validation_context *ctx,
182 if (!ctx->merge_dups)
185 if (ctx->ht) {
188 if (!drm_ht_find_item(ctx->ht, (unsigned long) vbo, &hash))
193 list_for_each_entry(entry, &ctx->bo_list, base.head) {
207 * @ctx: The validation context to search.
214 vmw_validation_find_res_dup(struct vmw_validation_context *ctx,
219 if (!ctx->merge_dups)
222 if (ctx->ht) {
225 if (!drm_ht_find_item(ctx->ht, (unsigned long) res, &hash))
230 list_for_each_entry(entry, &ctx->resource_ctx_list, head) {
237 list_for_each_entry(entry, &ctx->resource_list, head) {
251 * @ctx: The validation context.
258 int vmw_validation_add_bo(struct vmw_validation_context *ctx,
265 bo_node = vmw_validation_find_bo_dup(ctx, vbo);
276 bo_node = vmw_validation_mem_alloc(ctx, sizeof(*bo_node));
280 if (ctx->ht) {
282 ret = drm_ht_insert_item(ctx->ht, &bo_node->hash);
294 list_add_tail(&val_buf->head, &ctx->bo_list);
304 * @ctx: The validation context.
313 int vmw_validation_add_resource(struct vmw_validation_context *ctx,
323 node = vmw_validation_find_res_dup(ctx, res);
329 node = vmw_validation_mem_alloc(ctx, sizeof(*node) + priv_size);
335 if (ctx->ht) {
337 ret = drm_ht_insert_item(ctx->ht, &node->hash);
350 list_add_tail(&node->head, &ctx->resource_list);
355 list_add(&node->head, &ctx->resource_ctx_list);
358 list_add_tail(&node->head, &ctx->resource_ctx_list);
361 list_add_tail(&node->head, &ctx->resource_list);
383 * @ctx: The validation context.
389 void vmw_validation_res_set_dirty(struct vmw_validation_context *ctx,
406 * @ctx: The validation context.
414 void vmw_validation_res_switch_backup(struct vmw_validation_context *ctx,
434 * @ctx: The validation context.
440 int vmw_validation_res_reserve(struct vmw_validation_context *ctx,
446 list_splice_init(&ctx->resource_ctx_list, &ctx->resource_list);
448 list_for_each_entry(val, &ctx->resource_list, head) {
460 (ctx, vbo, vmw_resource_needs_backup(res),
469 vmw_validation_find_bo_dup(ctx,
483 vmw_validation_res_unreserve(ctx, true);
490 * @ctx: The validation context.
494 void vmw_validation_res_unreserve(struct vmw_validation_context *ctx,
499 list_splice_init(&ctx->resource_ctx_list, &ctx->resource_list);
501 list_for_each_entry(val, &ctx->resource_list, head) {
508 list_for_each_entry(val, &ctx->resource_list, head) {
534 struct ttm_operation_ctx ctx = {
547 return ttm_bo_validate(bo, &vmw_mob_placement, &ctx);
556 ret = ttm_bo_validate(bo, &vmw_vram_gmr_placement, &ctx);
565 ret = ttm_bo_validate(bo, &vmw_vram_placement, &ctx);
572 * @ctx: The validation context.
578 int vmw_validation_bo_validate(struct vmw_validation_context *ctx, bool intr)
583 list_for_each_entry(entry, &ctx->bo_list, base.head) {
588 struct ttm_operation_ctx ctx = {
594 &vmw_nonfixed_placement, &ctx);
629 * @ctx: The validation context.
638 int vmw_validation_res_validate(struct vmw_validation_context *ctx, bool intr)
643 list_for_each_entry(val, &ctx->resource_list, head) {
660 (ctx, vbo, vmw_resource_needs_backup(res),
672 * @ctx: The validation context.
681 void vmw_validation_drop_ht(struct vmw_validation_context *ctx)
686 if (!ctx->ht)
689 list_for_each_entry(entry, &ctx->bo_list, base.head)
690 (void) drm_ht_remove_item(ctx->ht, &entry->hash);
692 list_for_each_entry(val, &ctx->resource_list, head)
693 (void) drm_ht_remove_item(ctx->ht, &val->hash);
695 list_for_each_entry(val, &ctx->resource_ctx_list, head)
696 (void) drm_ht_remove_item(ctx->ht, &val->hash);
698 ctx->ht = NULL;
704 * @ctx: The validation context.
709 void vmw_validation_unref_lists(struct vmw_validation_context *ctx)
714 list_for_each_entry(entry, &ctx->bo_list, base.head) {
719 list_splice_init(&ctx->resource_ctx_list, &ctx->resource_list);
720 list_for_each_entry(val, &ctx->resource_list, head)
727 INIT_LIST_HEAD(&ctx->bo_list);
728 INIT_LIST_HEAD(&ctx->resource_list);
730 vmw_validation_mem_free(ctx);
736 * @ctx: The validation context.
748 int vmw_validation_prepare(struct vmw_validation_context *ctx,
763 ctx->res_mutex = mutex;
764 ret = vmw_validation_res_reserve(ctx, intr);
768 ret = vmw_validation_bo_reserve(ctx, intr);
772 ret = vmw_validation_bo_validate(ctx, intr);
776 ret = vmw_validation_res_validate(ctx, intr);
783 vmw_validation_bo_backoff(ctx);
785 vmw_validation_res_unreserve(ctx, true);
797 * @ctx: The validation context.
801 void vmw_validation_revert(struct vmw_validation_context *ctx)
803 vmw_validation_bo_backoff(ctx);
804 vmw_validation_res_unreserve(ctx, true);
805 if (ctx->res_mutex)
806 mutex_unlock(ctx->res_mutex);
807 vmw_validation_unref_lists(ctx);
813 * @ctx: The validation context.
819 void vmw_validation_done(struct vmw_validation_context *ctx,
822 vmw_validation_bo_fence(ctx, fence);
823 vmw_validation_res_unreserve(ctx, false);
824 if (ctx->res_mutex)
825 mutex_unlock(ctx->res_mutex);
826 vmw_validation_unref_lists(ctx);
832 * @ctx: Pointer to the validation context.
840 int vmw_validation_preload_bo(struct vmw_validation_context *ctx)
844 if (!vmw_validation_mem_alloc(ctx, size))
847 ctx->mem_size_left += size;
854 * @ctx: Pointer to the validation context.
863 int vmw_validation_preload_res(struct vmw_validation_context *ctx,
869 if (!vmw_validation_mem_alloc(ctx, size))
872 ctx->mem_size_left += size;
879 * @ctx: The validation context
884 void vmw_validation_bo_backoff(struct vmw_validation_context *ctx)
892 list_for_each_entry(entry, &ctx->bo_list, base.head) {
904 ttm_eu_backoff_reservation(&ctx->ticket, &ctx->bo_list);