diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.14.71/4967-drm-amdgpu-remove-job-adev-v2.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.14.71/4967-drm-amdgpu-remove-job-adev-v2.patch | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.14.71/4967-drm-amdgpu-remove-job-adev-v2.patch b/common/recipes-kernel/linux/linux-yocto-4.14.71/4967-drm-amdgpu-remove-job-adev-v2.patch new file mode 100644 index 00000000..a248bd0c --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.14.71/4967-drm-amdgpu-remove-job-adev-v2.patch @@ -0,0 +1,113 @@ +From 27d830371766ff8f5d44673c57de5c91a9ea22cc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Fri, 13 Jul 2018 17:15:54 +0200 +Subject: [PATCH 4967/5725] drm/amdgpu: remove job->adev (v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We can get that from the ring. + +v2: squash in "drm/amdgpu: always initialize job->base.sched" (Alex) + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Junwei Zhang <Jerry.Zhang@amd.com> +Acked-by: Chunming Zhou <david1.zhou@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Raveendra Talabattula <raveendra.talabattula@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 18 +++++++++++------- + drivers/gpu/drm/amd/amdgpu/amdgpu_job.h | 1 - + 2 files changed, 11 insertions(+), 8 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +index 1be5575..09efdd1 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +@@ -37,7 +37,7 @@ static void amdgpu_job_timedout(struct drm_sched_job *s_job) + job->base.sched->name, atomic_read(&ring->fence_drv.last_seq), + ring->fence_drv.sync_seq); + +- amdgpu_device_gpu_recover(job->adev, job, false); ++ amdgpu_device_gpu_recover(ring->adev, job, false); + } + + int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, +@@ -54,7 +54,11 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, + if (!*job) + return -ENOMEM; + +- (*job)->adev = adev; ++ /* ++ * Initialize the scheduler to at least some ring so that we always ++ * have a pointer to adev. ++ */ ++ (*job)->base.sched = &adev->rings[0]->sched; + (*job)->vm = vm; + (*job)->ibs = (void *)&(*job)[1]; + (*job)->num_ibs = num_ibs; +@@ -86,6 +90,7 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size, + + void amdgpu_job_free_resources(struct amdgpu_job *job) + { ++ struct amdgpu_ring *ring = to_amdgpu_ring(job->base.sched); + struct dma_fence *f; + unsigned i; + +@@ -93,7 +98,7 @@ void amdgpu_job_free_resources(struct amdgpu_job *job) + f = job->base.s_fence ? &job->base.s_fence->finished : job->fence; + + for (i = 0; i < job->num_ibs; ++i) +- amdgpu_ib_free(job->adev, &job->ibs[i], f); ++ amdgpu_ib_free(ring->adev, &job->ibs[i], f); + } + + static void amdgpu_job_free_cb(struct drm_sched_job *s_job) +@@ -167,7 +172,8 @@ static struct dma_fence *amdgpu_job_dependency(struct drm_sched_job *sched_job, + + if (fence && explicit) { + if (drm_sched_dependency_optimized(fence, s_entity)) { +- r = amdgpu_sync_fence(job->adev, &job->sched_sync, fence, false); ++ r = amdgpu_sync_fence(ring->adev, &job->sched_sync, ++ fence, false); + if (r) + DRM_ERROR("Error adding fence to sync (%d)\n", r); + } +@@ -190,7 +196,6 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job) + { + struct amdgpu_ring *ring = to_amdgpu_ring(sched_job->sched); + struct dma_fence *fence = NULL, *finished; +- struct amdgpu_device *adev; + struct amdgpu_job *job; + int r; + +@@ -200,13 +205,12 @@ static struct dma_fence *amdgpu_job_run(struct drm_sched_job *sched_job) + } + job = to_amdgpu_job(sched_job); + finished = &job->base.s_fence->finished; +- adev = job->adev; + + BUG_ON(amdgpu_sync_peek_fence(&job->sync, NULL)); + + trace_amdgpu_sched_run_job(job); + /* skip ib schedule when vram is lost */ +- if (job->vram_lost_counter != atomic_read(&adev->vram_lost_counter)) ++ if (job->vram_lost_counter != atomic_read(&ring->adev->vram_lost_counter)) + dma_fence_set_error(finished, -ECANCELED);/* skip IB as well if VRAM lost */ + + if (finished->error < 0) { +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h +index d77fd23..57cfe78 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.h +@@ -37,7 +37,6 @@ struct amdgpu_fence; + + struct amdgpu_job { + struct drm_sched_job base; +- struct amdgpu_device *adev; + struct amdgpu_vm *vm; + struct amdgpu_sync sync; + struct amdgpu_sync sched_sync; +-- +2.7.4 + |