]> Git Repo - linux.git/blobdiff - drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
Merge branch 'sched-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / drivers / gpu / drm / amd / amdgpu / amdgpu_sched.c
index 964b54381febc53359e435b995db8664798566e4..de98fbd2971eded37ecb896921255d38787ce7b5 100644 (file)
 #include <drm/drmP.h>
 #include "amdgpu.h"
 
-static struct fence *amdgpu_sched_run_job(struct amd_gpu_scheduler *sched,
-                                         struct amd_sched_entity *entity,
-                                         struct amd_sched_job *job)
+static struct fence *amdgpu_sched_dependency(struct amd_sched_job *job)
+{
+       struct amdgpu_job *sched_job = (struct amdgpu_job *)job;
+       return amdgpu_sync_get_fence(&sched_job->ibs->sync);
+}
+
+static struct fence *amdgpu_sched_run_job(struct amd_sched_job *job)
 {
-       int r = 0;
        struct amdgpu_job *sched_job;
        struct amdgpu_fence *fence;
+       int r;
 
        if (!job) {
                DRM_ERROR("job is null\n");
@@ -44,7 +48,7 @@ static struct fence *amdgpu_sched_run_job(struct amd_gpu_scheduler *sched,
        r = amdgpu_ib_schedule(sched_job->adev,
                               sched_job->num_ibs,
                               sched_job->ibs,
-                              sched_job->owner);
+                              sched_job->base.owner);
        if (r)
                goto err;
        fence = amdgpu_fence_ref(sched_job->ibs[sched_job->num_ibs - 1].fence);
@@ -58,12 +62,11 @@ static struct fence *amdgpu_sched_run_job(struct amd_gpu_scheduler *sched,
 err:
        DRM_ERROR("Run job error\n");
        mutex_unlock(&sched_job->job_lock);
-       sched->ops->process_job(sched, (struct amd_sched_job *)sched_job);
+       job->sched->ops->process_job(job);
        return NULL;
 }
 
-static void amdgpu_sched_process_job(struct amd_gpu_scheduler *sched,
-                                    struct amd_sched_job *job)
+static void amdgpu_sched_process_job(struct amd_sched_job *job)
 {
        struct amdgpu_job *sched_job;
 
@@ -78,6 +81,7 @@ static void amdgpu_sched_process_job(struct amd_gpu_scheduler *sched,
 }
 
 struct amd_sched_backend_ops amdgpu_sched_ops = {
+       .dependency = amdgpu_sched_dependency,
        .run_job = amdgpu_sched_run_job,
        .process_job = amdgpu_sched_process_job
 };
@@ -101,11 +105,11 @@ int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev,
                job->adev = adev;
                job->ibs = ibs;
                job->num_ibs = num_ibs;
-               job->owner = owner;
+               job->base.owner = owner;
                mutex_init(&job->job_lock);
                job->free_job = free_job;
                mutex_lock(&job->job_lock);
-               r = amd_sched_push_job((struct amd_sched_job *)job);
+               r = amd_sched_entity_push_job((struct amd_sched_job *)job);
                if (r) {
                        mutex_unlock(&job->job_lock);
                        kfree(job);
@@ -119,5 +123,6 @@ int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev,
                        return r;
                *f = fence_get(&ibs[num_ibs - 1].fence->base);
        }
+
        return 0;
 }
This page took 0.039016 seconds and 4 git commands to generate.