aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/linux-yocto-4.19.8/0812-drm-scheduler-Add-drm_sched_job_cleanup.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0812-drm-scheduler-Add-drm_sched_job_cleanup.patch')
-rw-r--r--common/recipes-kernel/linux/linux-yocto-4.19.8/0812-drm-scheduler-Add-drm_sched_job_cleanup.patch106
1 files changed, 106 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0812-drm-scheduler-Add-drm_sched_job_cleanup.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0812-drm-scheduler-Add-drm_sched_job_cleanup.patch
new file mode 100644
index 00000000..9ec8be64
--- /dev/null
+++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0812-drm-scheduler-Add-drm_sched_job_cleanup.patch
@@ -0,0 +1,106 @@
+From b8f9a7f0c7e230a5a7a6c356eddc563c648c0e03 Mon Sep 17 00:00:00 2001
+From: Sharat Masetty <smasetty@codeaurora.org>
+Date: Mon, 29 Oct 2018 15:02:28 +0530
+Subject: [PATCH 0812/2940] drm/scheduler: Add drm_sched_job_cleanup
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This patch adds a new API to clean up the scheduler job resources. This
+is primarliy needed in cases the job was created but was not queued to
+the scheduler queue. Additionally with this change, the layer which
+creates the scheduler job also gets to free up the job's resources and
+this entails moving the dma_fence_put(finished_fence) to the drivers
+ops free handler routines.
+
+Signed-off-by: Sharat Masetty <smasetty@codeaurora.org>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Acked-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 4 ++--
+ drivers/gpu/drm/scheduler/sched_entity.c | 1 -
+ drivers/gpu/drm/scheduler/sched_main.c | 13 ++++++++++++-
+ include/drm/gpu_scheduler.h | 1 +
+ 4 files changed, 15 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+index 109636557357..a0f6c0b2ee6b 100644
+--- a/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c
+@@ -3590,7 +3590,7 @@ static void gfx_v9_0_update_medium_grain_clock_gating(struct amdgpu_device *adev
+ {
+ uint32_t data, def;
+
+- adev->gfx.rlc.funcs->enter_safe_mode(adev);
++ amdgpu_gfx_rlc_enter_safe_mode(adev);
+
+ /* It is disabled by HW by default */
+ if (enable && (adev->cg_flags & AMD_CG_SUPPORT_GFX_MGCG)) {
+@@ -3657,7 +3657,7 @@ static void gfx_v9_0_update_medium_grain_clock_gating(struct amdgpu_device *adev
+ }
+ }
+
+- adev->gfx.rlc.funcs->exit_safe_mode(adev);
++ amdgpu_gfx_rlc_exit_safe_mode(adev);
+ }
+
+ static void gfx_v9_0_update_3d_clock_gating(struct amdgpu_device *adev,
+diff --git a/drivers/gpu/drm/scheduler/sched_entity.c b/drivers/gpu/drm/scheduler/sched_entity.c
+index 87738f91eee6..26db90635a7d 100644
+--- a/drivers/gpu/drm/scheduler/sched_entity.c
++++ b/drivers/gpu/drm/scheduler/sched_entity.c
+@@ -211,7 +211,6 @@ static void drm_sched_entity_kill_jobs_cb(struct dma_fence *f,
+
+ drm_sched_fence_finished(job->s_fence);
+ WARN_ON(job->s_fence->parent);
+- dma_fence_put(&job->s_fence->finished);
+ job->sched->ops->free_job(job);
+ }
+
+diff --git a/drivers/gpu/drm/scheduler/sched_main.c b/drivers/gpu/drm/scheduler/sched_main.c
+index 10403a232729..0ebe6b51962a 100644
+--- a/drivers/gpu/drm/scheduler/sched_main.c
++++ b/drivers/gpu/drm/scheduler/sched_main.c
+@@ -221,7 +221,6 @@ static void drm_sched_job_finish(struct work_struct *work)
+ schedule_delayed_work(&sched->work_tdr, sched->timeout);
+ spin_unlock(&sched->job_list_lock);
+
+- dma_fence_put(&s_job->s_fence->finished);
+ sched->ops->free_job(s_job);
+ }
+
+@@ -406,6 +405,18 @@ int drm_sched_job_init(struct drm_sched_job *job,
+ }
+ EXPORT_SYMBOL(drm_sched_job_init);
+
++/**
++ * drm_sched_job_cleanup - clean up scheduler job resources
++ *
++ * @job: scheduler job to clean up
++ */
++void drm_sched_job_cleanup(struct drm_sched_job *job)
++{
++ dma_fence_put(&job->s_fence->finished);
++ job->s_fence = NULL;
++}
++EXPORT_SYMBOL(drm_sched_job_cleanup);
++
+ /**
+ * drm_sched_ready - is the scheduler ready
+ *
+diff --git a/include/drm/gpu_scheduler.h b/include/drm/gpu_scheduler.h
+index 8799458a4f23..1d93e4b41e6c 100644
+--- a/include/drm/gpu_scheduler.h
++++ b/include/drm/gpu_scheduler.h
+@@ -293,6 +293,7 @@ void drm_sched_fini(struct drm_gpu_scheduler *sched);
+ int drm_sched_job_init(struct drm_sched_job *job,
+ struct drm_sched_entity *entity,
+ void *owner);
++void drm_sched_job_cleanup(struct drm_sched_job *job);
+ void drm_sched_wakeup(struct drm_gpu_scheduler *sched);
+ void drm_sched_hw_job_reset(struct drm_gpu_scheduler *sched,
+ struct drm_sched_job *job);
+--
+2.17.1
+