Lines Matching defs:task
111 int lima_sched_task_init(struct lima_sched_task *task,
118 task->bos = kmemdup(bos, sizeof(*bos) * num_bos, GFP_KERNEL);
119 if (!task->bos)
125 err = drm_sched_job_init(&task->base, &context->base, vm);
127 kfree(task->bos);
131 task->num_bos = num_bos;
132 task->vm = lima_vm_get(vm);
134 xa_init_flags(&task->deps, XA_FLAGS_ALLOC);
139 void lima_sched_task_fini(struct lima_sched_task *task)
145 drm_sched_job_cleanup(&task->base);
147 xa_for_each(&task->deps, index, fence) {
150 xa_destroy(&task->deps);
152 if (task->bos) {
153 for (i = 0; i < task->num_bos; i++)
154 drm_gem_object_put(&task->bos[i]->base.base);
155 kfree(task->bos);
158 lima_vm_put(task->vm);
178 struct lima_sched_task *task)
180 struct dma_fence *fence = dma_fence_get(&task->base.s_fence->finished);
182 trace_lima_task_submit(task);
183 drm_sched_entity_push_job(&task->base, &context->base);
190 struct lima_sched_task *task = to_lima_task(job);
192 if (!xa_empty(&task->deps))
193 return xa_erase(&task->deps, task->last_dep++);
222 struct lima_sched_task *task = to_lima_task(job);
243 task->fence = &fence->base;
248 ret = dma_fence_get(task->fence);
250 pipe->current_task = task;
263 * 1. move this to task fini to save some wait time?
271 pipe->current_vm = lima_vm_get(task->vm);
280 trace_lima_task_run(task);
283 pipe->task_run(pipe, task);
285 return task->fence;
288 static void lima_sched_build_error_task_list(struct lima_sched_task *task)
291 struct lima_sched_pipe *pipe = to_lima_pipe(task->base.sched);
296 container_of(task->base.entity,
310 dev_info(dev->dev, "fail to save task state from %s pid %d: "
311 "error task list is full\n", ctx->pname, ctx->pid);
322 for (i = 0; i < task->num_bos; i++) {
323 struct lima_bo *bo = task->bos[i];
333 dev_err(dev->dev, "fail to alloc task dump buffer of size %x\n",
350 memcpy(chunk + 1, task->frame, pipe->frame_size);
367 for (i = 0; i < task->num_bos; i++) {
368 struct lima_bo *bo = task->bos[i];
373 buffer_chunk->va = lima_vm_get_va(task->vm, bo);
410 dev_info(dev->dev, "save error task state success\n");
419 struct lima_sched_task *task = to_lima_task(job);
425 drm_sched_stop(&pipe->base, &task->base);
427 drm_sched_increase_karma(&task->base);
429 lima_sched_build_error_task_list(task);
454 struct lima_sched_task *task = to_lima_task(job);
456 struct lima_vm *vm = task->vm;
457 struct lima_bo **bos = task->bos;
460 dma_fence_put(task->fence);
462 for (i = 0; i < task->num_bos; i++)
465 lima_sched_task_fini(task);
466 kmem_cache_free(pipe->task_slab, task);
518 struct lima_sched_task *task = pipe->current_task;
522 if (task && task->recoverable)
528 dma_fence_signal(task->fence);