Lines Matching full:task
112 int lima_sched_task_init(struct lima_sched_task *task, in lima_sched_task_init() argument
119 task->bos = kmemdup(bos, sizeof(*bos) * num_bos, GFP_KERNEL); in lima_sched_task_init()
120 if (!task->bos) in lima_sched_task_init()
126 err = drm_sched_job_init(&task->base, &context->base, vm); in lima_sched_task_init()
128 kfree(task->bos); in lima_sched_task_init()
132 task->num_bos = num_bos; in lima_sched_task_init()
133 task->vm = lima_vm_get(vm); in lima_sched_task_init()
135 xa_init_flags(&task->deps, XA_FLAGS_ALLOC); in lima_sched_task_init()
140 void lima_sched_task_fini(struct lima_sched_task *task) in lima_sched_task_fini() argument
146 drm_sched_job_cleanup(&task->base); in lima_sched_task_fini()
148 xa_for_each(&task->deps, index, fence) { in lima_sched_task_fini()
151 xa_destroy(&task->deps); in lima_sched_task_fini()
153 if (task->bos) { in lima_sched_task_fini()
154 for (i = 0; i < task->num_bos; i++) in lima_sched_task_fini()
155 drm_gem_object_put(&task->bos[i]->base.base); in lima_sched_task_fini()
156 kfree(task->bos); in lima_sched_task_fini()
159 lima_vm_put(task->vm); in lima_sched_task_fini()
179 struct lima_sched_task *task) in lima_sched_context_queue_task() argument
181 struct dma_fence *fence = dma_fence_get(&task->base.s_fence->finished); in lima_sched_context_queue_task()
183 trace_lima_task_submit(task); in lima_sched_context_queue_task()
184 drm_sched_entity_push_job(&task->base, &context->base); in lima_sched_context_queue_task()
191 struct lima_sched_task *task = to_lima_task(job); in lima_sched_dependency() local
193 if (!xa_empty(&task->deps)) in lima_sched_dependency()
194 return xa_erase(&task->deps, task->last_dep++); in lima_sched_dependency()
223 struct lima_sched_task *task = to_lima_task(job); in lima_sched_run_job() local
243 task->fence = &fence->base; in lima_sched_run_job()
248 dma_fence_get(task->fence); in lima_sched_run_job()
250 pipe->current_task = task; in lima_sched_run_job()
263 * 1. move this to task fini to save some wait time? in lima_sched_run_job()
271 pipe->current_vm = lima_vm_get(task->vm); in lima_sched_run_job()
280 trace_lima_task_run(task); in lima_sched_run_job()
283 pipe->task_run(pipe, task); in lima_sched_run_job()
285 return task->fence; in lima_sched_run_job()
288 static void lima_sched_build_error_task_list(struct lima_sched_task *task) in lima_sched_build_error_task_list() argument
291 struct lima_sched_pipe *pipe = to_lima_pipe(task->base.sched); in lima_sched_build_error_task_list()
296 container_of(task->base.entity, in lima_sched_build_error_task_list()
312 dev_info(dev->dev, "fail to save task state from %s pid %d: " in lima_sched_build_error_task_list()
313 "error task list is full\n", ctx->pname, ctx->pid); in lima_sched_build_error_task_list()
324 for (i = 0; i < task->num_bos; i++) { in lima_sched_build_error_task_list()
325 struct lima_bo *bo = task->bos[i]; in lima_sched_build_error_task_list()
335 dev_err(dev->dev, "fail to alloc task dump buffer of size %x\n", in lima_sched_build_error_task_list()
352 memcpy(chunk + 1, task->frame, pipe->frame_size); in lima_sched_build_error_task_list()
369 for (i = 0; i < task->num_bos; i++) { in lima_sched_build_error_task_list()
370 struct lima_bo *bo = task->bos[i]; in lima_sched_build_error_task_list()
375 buffer_chunk->va = lima_vm_get_va(task->vm, bo); in lima_sched_build_error_task_list()
412 dev_info(dev->dev, "save error task state success\n"); in lima_sched_build_error_task_list()
421 struct lima_sched_task *task = to_lima_task(job); in lima_sched_timedout_job() local
427 drm_sched_stop(&pipe->base, &task->base); in lima_sched_timedout_job()
429 drm_sched_increase_karma(&task->base); in lima_sched_timedout_job()
431 lima_sched_build_error_task_list(task); in lima_sched_timedout_job()
458 struct lima_sched_task *task = to_lima_task(job); in lima_sched_free_job() local
460 struct lima_vm *vm = task->vm; in lima_sched_free_job()
461 struct lima_bo **bos = task->bos; in lima_sched_free_job()
464 dma_fence_put(task->fence); in lima_sched_free_job()
466 for (i = 0; i < task->num_bos; i++) in lima_sched_free_job()
469 lima_sched_task_fini(task); in lima_sched_free_job()
470 kmem_cache_free(pipe->task_slab, task); in lima_sched_free_job()
523 struct lima_sched_task *task = pipe->current_task; in lima_sched_pipe_task_done() local
527 if (task && task->recoverable) in lima_sched_pipe_task_done()
533 dma_fence_signal(task->fence); in lima_sched_pipe_task_done()