drm/etnaviv: Use scheduler dependency handling
[sfrench/cifs-2.6.git] / drivers / gpu / drm / etnaviv / etnaviv_sched.c
index a8452ce10e3ab9b6aa0a9cca959f06fd5f66cfb4..72e2553fbc984983df9767a7ed7ae9536477227c 100644 (file)
@@ -17,48 +17,6 @@ module_param_named(job_hang_limit, etnaviv_job_hang_limit, int , 0444);
 static int etnaviv_hw_jobs_limit = 4;
 module_param_named(hw_job_limit, etnaviv_hw_jobs_limit, int , 0444);
 
-static struct dma_fence *
-etnaviv_sched_dependency(struct drm_sched_job *sched_job,
-                        struct drm_sched_entity *entity)
-{
-       struct etnaviv_gem_submit *submit = to_etnaviv_submit(sched_job);
-       struct dma_fence *fence;
-       int i;
-
-       if (unlikely(submit->in_fence)) {
-               fence = submit->in_fence;
-               submit->in_fence = NULL;
-
-               if (!dma_fence_is_signaled(fence))
-                       return fence;
-
-               dma_fence_put(fence);
-       }
-
-       for (i = 0; i < submit->nr_bos; i++) {
-               struct etnaviv_gem_submit_bo *bo = &submit->bos[i];
-               int j;
-
-               for (j = 0; j < bo->nr_fences; j++) {
-                       if (!bo->fences[j])
-                               continue;
-
-                       fence = bo->fences[j];
-                       bo->fences[j] = NULL;
-
-                       if (!dma_fence_is_signaled(fence))
-                               return fence;
-
-                       dma_fence_put(fence);
-               }
-               kfree(bo->fences);
-               bo->nr_fences = 0;
-               bo->fences = NULL;
-       }
-
-       return NULL;
-}
-
 static struct dma_fence *etnaviv_sched_run_job(struct drm_sched_job *sched_job)
 {
        struct etnaviv_gem_submit *submit = to_etnaviv_submit(sched_job);
@@ -132,29 +90,22 @@ static void etnaviv_sched_free_job(struct drm_sched_job *sched_job)
 }
 
 static const struct drm_sched_backend_ops etnaviv_sched_ops = {
-       .dependency = etnaviv_sched_dependency,
        .run_job = etnaviv_sched_run_job,
        .timedout_job = etnaviv_sched_timedout_job,
        .free_job = etnaviv_sched_free_job,
 };
 
-int etnaviv_sched_push_job(struct drm_sched_entity *sched_entity,
-                          struct etnaviv_gem_submit *submit)
+int etnaviv_sched_push_job(struct etnaviv_gem_submit *submit)
 {
        int ret = 0;
 
        /*
         * Hold the fence lock across the whole operation to avoid jobs being
         * pushed out of order with regard to their sched fence seqnos as
-        * allocated in drm_sched_job_init.
+        * allocated in drm_sched_job_arm.
         */
        mutex_lock(&submit->gpu->fence_lock);
 
-       ret = drm_sched_job_init(&submit->sched_job, sched_entity,
-                                submit->ctx);
-       if (ret)
-               goto out_unlock;
-
        drm_sched_job_arm(&submit->sched_job);
 
        submit->out_fence = dma_fence_get(&submit->sched_job.s_fence->finished);