Commit c79a4487 authored by Daniel Vetter's avatar Daniel Vetter

drm/lima: use scheduler dependency tracking

Nothing special going on here.

Aside reviewing the code, it seems like drm_sched_job_arm() should be
moved into lima_sched_context_queue_task and put under some mutex
together with drm_sched_push_job(). See the kerneldoc for
drm_sched_push_job().

v2: Rebase over renamed functions to add dependencies.
Reviewed-by: default avatarQiang Yu <yuq825@gmail.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@intel.com>
Cc: Qiang Yu <yuq825@gmail.com>
Cc: Sumit Semwal <sumit.semwal@linaro.org>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: lima@lists.freedesktop.org
Cc: linux-media@vger.kernel.org
Cc: linaro-mm-sig@lists.linaro.org
Link: https://patchwork.freedesktop.org/patch/msgid/20210805104705.862416-9-daniel.vetter@ffwll.ch
parent 53516280
...@@ -267,7 +267,9 @@ static int lima_gem_sync_bo(struct lima_sched_task *task, struct lima_bo *bo, ...@@ -267,7 +267,9 @@ static int lima_gem_sync_bo(struct lima_sched_task *task, struct lima_bo *bo,
if (explicit) if (explicit)
return 0; return 0;
return drm_gem_fence_array_add_implicit(&task->deps, &bo->base.base, write); return drm_sched_job_add_implicit_dependencies(&task->base,
&bo->base.base,
write);
} }
static int lima_gem_add_deps(struct drm_file *file, struct lima_submit *submit) static int lima_gem_add_deps(struct drm_file *file, struct lima_submit *submit)
...@@ -285,7 +287,7 @@ static int lima_gem_add_deps(struct drm_file *file, struct lima_submit *submit) ...@@ -285,7 +287,7 @@ static int lima_gem_add_deps(struct drm_file *file, struct lima_submit *submit)
if (err) if (err)
return err; return err;
err = drm_gem_fence_array_add(&submit->task->deps, fence); err = drm_sched_job_add_dependency(&submit->task->base, fence);
if (err) { if (err) {
dma_fence_put(fence); dma_fence_put(fence);
return err; return err;
......
...@@ -134,24 +134,15 @@ int lima_sched_task_init(struct lima_sched_task *task, ...@@ -134,24 +134,15 @@ int lima_sched_task_init(struct lima_sched_task *task,
task->num_bos = num_bos; task->num_bos = num_bos;
task->vm = lima_vm_get(vm); task->vm = lima_vm_get(vm);
xa_init_flags(&task->deps, XA_FLAGS_ALLOC);
return 0; return 0;
} }
void lima_sched_task_fini(struct lima_sched_task *task) void lima_sched_task_fini(struct lima_sched_task *task)
{ {
struct dma_fence *fence;
unsigned long index;
int i; int i;
drm_sched_job_cleanup(&task->base); drm_sched_job_cleanup(&task->base);
xa_for_each(&task->deps, index, fence) {
dma_fence_put(fence);
}
xa_destroy(&task->deps);
if (task->bos) { if (task->bos) {
for (i = 0; i < task->num_bos; i++) for (i = 0; i < task->num_bos; i++)
drm_gem_object_put(&task->bos[i]->base.base); drm_gem_object_put(&task->bos[i]->base.base);
...@@ -186,17 +177,6 @@ struct dma_fence *lima_sched_context_queue_task(struct lima_sched_task *task) ...@@ -186,17 +177,6 @@ struct dma_fence *lima_sched_context_queue_task(struct lima_sched_task *task)
return fence; return fence;
} }
static struct dma_fence *lima_sched_dependency(struct drm_sched_job *job,
struct drm_sched_entity *entity)
{
struct lima_sched_task *task = to_lima_task(job);
if (!xa_empty(&task->deps))
return xa_erase(&task->deps, task->last_dep++);
return NULL;
}
static int lima_pm_busy(struct lima_device *ldev) static int lima_pm_busy(struct lima_device *ldev)
{ {
int ret; int ret;
...@@ -472,7 +452,6 @@ static void lima_sched_free_job(struct drm_sched_job *job) ...@@ -472,7 +452,6 @@ static void lima_sched_free_job(struct drm_sched_job *job)
} }
static const struct drm_sched_backend_ops lima_sched_ops = { static const struct drm_sched_backend_ops lima_sched_ops = {
.dependency = lima_sched_dependency,
.run_job = lima_sched_run_job, .run_job = lima_sched_run_job,
.timedout_job = lima_sched_timedout_job, .timedout_job = lima_sched_timedout_job,
.free_job = lima_sched_free_job, .free_job = lima_sched_free_job,
......
...@@ -23,9 +23,6 @@ struct lima_sched_task { ...@@ -23,9 +23,6 @@ struct lima_sched_task {
struct lima_vm *vm; struct lima_vm *vm;
void *frame; void *frame;
struct xarray deps;
unsigned long last_dep;
struct lima_bo **bos; struct lima_bo **bos;
int num_bos; int num_bos;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment