Lines Matching refs:task

108 int lima_sched_task_init(struct lima_sched_task *task,  in lima_sched_task_init()  argument
115 task->bos = kmemdup(bos, sizeof(*bos) * num_bos, GFP_KERNEL); in lima_sched_task_init()
116 if (!task->bos) in lima_sched_task_init()
122 err = drm_sched_job_init(&task->base, &context->base, vm); in lima_sched_task_init()
124 kfree(task->bos); in lima_sched_task_init()
128 task->num_bos = num_bos; in lima_sched_task_init()
129 task->vm = lima_vm_get(vm); in lima_sched_task_init()
131 xa_init_flags(&task->deps, XA_FLAGS_ALLOC); in lima_sched_task_init()
136 void lima_sched_task_fini(struct lima_sched_task *task) in lima_sched_task_fini() argument
142 drm_sched_job_cleanup(&task->base); in lima_sched_task_fini()
144 xa_for_each(&task->deps, index, fence) { in lima_sched_task_fini()
147 xa_destroy(&task->deps); in lima_sched_task_fini()
149 if (task->bos) { in lima_sched_task_fini()
150 for (i = 0; i < task->num_bos; i++) in lima_sched_task_fini()
151 drm_gem_object_put_unlocked(&task->bos[i]->gem); in lima_sched_task_fini()
152 kfree(task->bos); in lima_sched_task_fini()
155 lima_vm_put(task->vm); in lima_sched_task_fini()
174 struct lima_sched_task *task) in lima_sched_context_queue_task() argument
176 struct dma_fence *fence = dma_fence_get(&task->base.s_fence->finished); in lima_sched_context_queue_task()
178 drm_sched_entity_push_job(&task->base, &context->base); in lima_sched_context_queue_task()
185 struct lima_sched_task *task = to_lima_task(job); in lima_sched_dependency() local
187 if (!xa_empty(&task->deps)) in lima_sched_dependency()
188 return xa_erase(&task->deps, task->last_dep++); in lima_sched_dependency()
195 struct lima_sched_task *task = to_lima_task(job); in lima_sched_run_job() local
209 task->fence = &fence->base; in lima_sched_run_job()
214 ret = dma_fence_get(task->fence); in lima_sched_run_job()
216 pipe->current_task = task; in lima_sched_run_job()
236 if (task->vm != pipe->current_vm) { in lima_sched_run_job()
237 vm = lima_vm_get(task->vm); in lima_sched_run_job()
239 pipe->current_vm = task->vm; in lima_sched_run_job()
253 pipe->task_run(pipe, task); in lima_sched_run_job()
255 return task->fence; in lima_sched_run_job()
259 struct lima_sched_task *task) in lima_sched_handle_error_task() argument
261 drm_sched_stop(&pipe->base, &task->base); in lima_sched_handle_error_task()
263 if (task) in lima_sched_handle_error_task()
264 drm_sched_increase_karma(&task->base); in lima_sched_handle_error_task()
290 struct lima_sched_task *task = to_lima_task(job); in lima_sched_timedout_job() local
294 lima_sched_handle_error_task(pipe, task); in lima_sched_timedout_job()
299 struct lima_sched_task *task = to_lima_task(job); in lima_sched_free_job() local
301 struct lima_vm *vm = task->vm; in lima_sched_free_job()
302 struct lima_bo **bos = task->bos; in lima_sched_free_job()
305 dma_fence_put(task->fence); in lima_sched_free_job()
307 for (i = 0; i < task->num_bos; i++) in lima_sched_free_job()
310 lima_sched_task_fini(task); in lima_sched_free_job()
311 kmem_cache_free(pipe->task_slab, task); in lima_sched_free_job()
325 struct lima_sched_task *task = pipe->current_task; in lima_sched_error_work() local
327 lima_sched_handle_error_task(pipe, task); in lima_sched_error_work()
354 struct lima_sched_task *task = pipe->current_task; in lima_sched_pipe_task_done() local
357 dma_fence_signal(task->fence); in lima_sched_pipe_task_done()