diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0440-drm-amdgpu-use-amd_sched_job-in-its-backend-ops.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0440-drm-amdgpu-use-amd_sched_job-in-its-backend-ops.patch | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/common/recipes-kernel/linux/files/0440-drm-amdgpu-use-amd_sched_job-in-its-backend-ops.patch b/common/recipes-kernel/linux/files/0440-drm-amdgpu-use-amd_sched_job-in-its-backend-ops.patch deleted file mode 100644 index c72227c2..00000000 --- a/common/recipes-kernel/linux/files/0440-drm-amdgpu-use-amd_sched_job-in-its-backend-ops.patch +++ /dev/null @@ -1,204 +0,0 @@ -From 953e8fd4e734857f6dabbaf325035bf10c4a9c7a Mon Sep 17 00:00:00 2001 -From: Chunming Zhou <david1.zhou@amd.com> -Date: Thu, 6 Aug 2015 15:19:12 +0800 -Subject: [PATCH 0440/1050] drm/amdgpu: use amd_sched_job in its backend ops - -Signed-off-by: Chunming Zhou <david1.zhou@amd.com> -Reviewed-by: Christian K?nig <christian.koenig@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 34 +++++++++++++-------------- - drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 30 +++++++++++------------ - drivers/gpu/drm/amd/scheduler/gpu_scheduler.h | 11 +++++---- - 3 files changed, 37 insertions(+), 38 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -index 039bd1f..d13d015 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c -@@ -29,10 +29,16 @@ - - static int amdgpu_sched_prepare_job(struct amd_gpu_scheduler *sched, - struct amd_sched_entity *entity, -- void *job) -+ struct amd_sched_job *job) - { - int r = 0; -- struct amdgpu_cs_parser *sched_job = (struct amdgpu_cs_parser *)job; -+ struct amdgpu_cs_parser *sched_job; -+ if (!job || !job->data) { -+ DRM_ERROR("job is null\n"); -+ return -EINVAL; -+ } -+ -+ sched_job = (struct amdgpu_cs_parser *)job->data; - if (sched_job->prepare_job) { - r = sched_job->prepare_job(sched_job); - if (r) { -@@ -51,11 +57,11 @@ static struct fence *amdgpu_sched_run_job(struct amd_gpu_scheduler *sched, - struct amdgpu_cs_parser *sched_job; - struct amdgpu_fence *fence; - -- if (!job || !job->job) { -+ if (!job || !job->data) { - DRM_ERROR("job is null\n"); - return NULL; - } -- sched_job = (struct amdgpu_cs_parser *)job->job; -+ sched_job = (struct amdgpu_cs_parser *)job->data; - mutex_lock(&sched_job->job_lock); - r = amdgpu_ib_schedule(sched_job->adev, - sched_job->num_ibs, -@@ -83,22 +89,16 @@ err: - return NULL; - } - --static void amdgpu_sched_process_job(struct amd_gpu_scheduler *sched, void *job) -+static void amdgpu_sched_process_job(struct amd_gpu_scheduler *sched, -+ struct amd_sched_job *job) - { -- struct amdgpu_cs_parser *sched_job = NULL; -- struct amdgpu_fence *fence = NULL; -- struct amdgpu_ring *ring = NULL; -- struct amdgpu_device *adev = NULL; -+ struct amdgpu_cs_parser *sched_job; - -- if (!job) -- return; -- sched_job = (struct amdgpu_cs_parser *)job; -- fence = sched_job->ibs[sched_job->num_ibs - 1].fence; -- if (!fence) -+ if (!job || !job->data) { -+ DRM_ERROR("job is null\n"); - return; -- ring = fence->ring; -- adev = ring->adev; -- -+ } -+ sched_job = (struct amdgpu_cs_parser *)job->data; - schedule_work(&sched_job->job_work); - } - -diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c -index 438dc23..33b4f55 100644 ---- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c -+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c -@@ -291,8 +291,15 @@ int amd_sched_entity_fini(struct amd_gpu_scheduler *sched, - */ - int amd_sched_push_job(struct amd_gpu_scheduler *sched, - struct amd_sched_entity *c_entity, -- void *job) -+ void *data) - { -+ struct amd_sched_job *job = kzalloc(sizeof(struct amd_sched_job), -+ GFP_KERNEL); -+ if (!job) -+ return -ENOMEM; -+ job->sched = sched; -+ job->s_entity = c_entity; -+ job->data = data; - while (kfifo_in_spinlocked(&c_entity->job_queue, &job, sizeof(void *), - &c_entity->queue_lock) != sizeof(void *)) { - /** -@@ -366,7 +373,7 @@ static void amd_sched_process_job(struct fence *f, struct fence_cb *cb) - atomic64_dec(&sched->hw_rq_count); - spin_unlock_irqrestore(&sched->queue_lock, flags); - -- sched->ops->process_job(sched, sched_job->job); -+ sched->ops->process_job(sched, sched_job); - kfree(sched_job); - wake_up_interruptible(&sched->wait_queue); - } -@@ -374,7 +381,7 @@ static void amd_sched_process_job(struct fence *f, struct fence_cb *cb) - static int amd_sched_main(void *param) - { - int r; -- void *job; -+ struct amd_sched_job *job; - struct sched_param sparam = {.sched_priority = 1}; - struct amd_sched_entity *c_entity = NULL; - struct amd_gpu_scheduler *sched = (struct amd_gpu_scheduler *)param; -@@ -382,7 +389,6 @@ static int amd_sched_main(void *param) - sched_setscheduler(current, SCHED_FIFO, &sparam); - - while (!kthread_should_stop()) { -- struct amd_sched_job *sched_job = NULL; - struct fence *fence; - - wait_event_interruptible(sched->wait_queue, -@@ -394,26 +400,18 @@ static int amd_sched_main(void *param) - r = sched->ops->prepare_job(sched, c_entity, job); - if (!r) { - unsigned long flags; -- sched_job = kzalloc(sizeof(struct amd_sched_job), -- GFP_KERNEL); -- if (!sched_job) { -- WARN(true, "No memory to allocate\n"); -- continue; -- } -- sched_job->job = job; -- sched_job->sched = sched; - spin_lock_irqsave(&sched->queue_lock, flags); -- list_add_tail(&sched_job->list, &sched->active_hw_rq); -+ list_add_tail(&job->list, &sched->active_hw_rq); - atomic64_inc(&sched->hw_rq_count); - spin_unlock_irqrestore(&sched->queue_lock, flags); - } - mutex_lock(&sched->sched_lock); -- fence = sched->ops->run_job(sched, c_entity, sched_job); -+ fence = sched->ops->run_job(sched, c_entity, job); - if (fence) { -- r = fence_add_callback(fence, &sched_job->cb, -+ r = fence_add_callback(fence, &job->cb, - amd_sched_process_job); - if (r == -ENOENT) -- amd_sched_process_job(fence, &sched_job->cb); -+ amd_sched_process_job(fence, &job->cb); - else if (r) - DRM_ERROR("fence add callback failed (%d)\n", r); - fence_put(fence); -diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h -index e7cc40a..f54615d 100644 ---- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h -+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.h -@@ -76,7 +76,8 @@ struct amd_sched_job { - struct list_head list; - struct fence_cb cb; - struct amd_gpu_scheduler *sched; -- void *job; -+ struct amd_sched_entity *s_entity; -+ void *data; - }; - - /** -@@ -86,11 +87,12 @@ struct amd_sched_job { - struct amd_sched_backend_ops { - int (*prepare_job)(struct amd_gpu_scheduler *sched, - struct amd_sched_entity *c_entity, -- void *job); -+ struct amd_sched_job *job); - struct fence *(*run_job)(struct amd_gpu_scheduler *sched, - struct amd_sched_entity *c_entity, - struct amd_sched_job *job); -- void (*process_job)(struct amd_gpu_scheduler *sched, void *job); -+ void (*process_job)(struct amd_gpu_scheduler *sched, -+ struct amd_sched_job *job); - }; - - /** -@@ -120,12 +122,11 @@ struct amd_gpu_scheduler *amd_sched_create(void *device, - uint32_t granularity, - uint32_t preemption, - uint32_t hw_submission); -- - int amd_sched_destroy(struct amd_gpu_scheduler *sched); - - int amd_sched_push_job(struct amd_gpu_scheduler *sched, - struct amd_sched_entity *c_entity, -- void *job); -+ void *data); - - int amd_sched_wait_emit(struct amd_sched_entity *c_entity, - uint64_t seq, --- -1.9.1 - |