diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0280-drm-amdgpu-rename-amdgpu_sched.c-to-amdgpu_job.c.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0280-drm-amdgpu-rename-amdgpu_sched.c-to-amdgpu_job.c.patch | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/files/0280-drm-amdgpu-rename-amdgpu_sched.c-to-amdgpu_job.c.patch b/common/recipes-kernel/linux/files/0280-drm-amdgpu-rename-amdgpu_sched.c-to-amdgpu_job.c.patch new file mode 100644 index 00000000..e76006c8 --- /dev/null +++ b/common/recipes-kernel/linux/files/0280-drm-amdgpu-rename-amdgpu_sched.c-to-amdgpu_job.c.patch @@ -0,0 +1,338 @@ +From 5d80a5c6d33cb16be4e609c6302c09a5db7200c8 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com> +Date: Mon, 1 Feb 2016 12:31:01 +0100 +Subject: [PATCH 0280/1110] drm/amdgpu: rename amdgpu_sched.c to amdgpu_job.c +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +That's probably a better matching name. + +Signed-off-by: Christian König <christian.koenig@amd.com> +Reviewed-by: Alex Deucher <alexander.deucer@amd.com> +Signed-off-by: Alex Deucher <alexander.deucher@amd.com> +Signed-off-by: Kalyan Alle <kalyan.alle@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 153 ++++++++++++++++++++++++++++++ + drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 151 ----------------------------- + 2 files changed, 153 insertions(+), 151 deletions(-) + create mode 100644 drivers/gpu/drm/amd/amdgpu/amdgpu_job.c + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +new file mode 100644 +index 0000000..fe4f6be +--- /dev/null ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +@@ -0,0 +1,153 @@ ++/* ++ * Copyright 2015 Advanced Micro Devices, Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR ++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * ++ */ ++#include <linux/kthread.h> ++#include <linux/wait.h> ++#include <linux/sched.h> ++#include <drm/drmP.h> ++#include "amdgpu.h" ++#include "amdgpu_trace.h" ++ ++int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, ++ struct amdgpu_job **job) ++{ ++ size_t size = sizeof(struct amdgpu_job); ++ ++ if (num_ibs == 0) ++ return -EINVAL; ++ ++ size += sizeof(struct amdgpu_ib) * num_ibs; ++ ++ *job = kzalloc(size, GFP_KERNEL); ++ if (!*job) ++ return -ENOMEM; ++ ++ (*job)->adev = adev; ++ (*job)->ibs = (void *)&(*job)[1]; ++ (*job)->num_ibs = num_ibs; ++ ++ return 0; ++} ++ ++int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size, ++ struct amdgpu_job **job) ++{ ++ int r; ++ ++ r = amdgpu_job_alloc(adev, 1, job); ++ if (r) ++ return r; ++ ++ r = amdgpu_ib_get(adev, NULL, size, &(*job)->ibs[0]); ++ if (r) ++ kfree(*job); ++ ++ return r; ++} ++ ++void amdgpu_job_free(struct amdgpu_job *job) ++{ ++ unsigned i; ++ ++ for (i = 0; i < job->num_ibs; ++i) ++ amdgpu_ib_free(job->adev, &job->ibs[i]); ++ ++ amdgpu_bo_unref(&job->uf.bo); ++ kfree(job); ++} ++ ++int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, ++ void *owner, struct fence **f) ++{ ++ struct amdgpu_device *adev = job->adev; ++ ++ job->ring = ring; ++ job->base.sched = &ring->sched; ++ job->base.s_entity = &adev->kernel_ctx.rings[ring->idx].entity; ++ job->base.s_fence = amd_sched_fence_create(job->base.s_entity, owner); ++ if (!job->base.s_fence) ++ return -ENOMEM; ++ ++ *f = fence_get(&job->base.s_fence->base); ++ ++ job->owner = owner; ++ amd_sched_entity_push_job(&job->base); ++ ++ return 0; ++} ++ ++static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job) ++{ ++ struct amdgpu_job *job = to_amdgpu_job(sched_job); ++ struct amdgpu_sync *sync = &job->ibs->sync; ++ struct amdgpu_vm *vm = job->ibs->vm; ++ ++ struct fence *fence = amdgpu_sync_get_fence(sync); ++ ++ if (fence == NULL && vm && !job->ibs->grabbed_vmid) { ++ struct amdgpu_ring *ring = job->ring; ++ int r; ++ ++ r = amdgpu_vm_grab_id(vm, ring, sync, ++ &job->base.s_fence->base); ++ if (r) ++ DRM_ERROR("Error getting VM ID (%d)\n", r); ++ else ++ job->ibs->grabbed_vmid = true; ++ ++ fence = amdgpu_sync_get_fence(sync); ++ } ++ ++ return fence; ++} ++ ++static struct fence *amdgpu_job_run(struct amd_sched_job *sched_job) ++{ ++ struct fence *fence = NULL; ++ struct amdgpu_job *job; ++ int r; ++ ++ if (!sched_job) { ++ DRM_ERROR("job is null\n"); ++ return NULL; ++ } ++ job = to_amdgpu_job(sched_job); ++ trace_amdgpu_sched_run_job(job); ++ r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, ++ job->owner, &fence); ++ if (r) { ++ DRM_ERROR("Error scheduling IBs (%d)\n", r); ++ goto err; ++ } ++ ++err: ++ amdgpu_job_free(job); ++ return fence; ++} ++ ++struct amd_sched_backend_ops amdgpu_sched_ops = { ++ .dependency = amdgpu_job_dependency, ++ .run_job = amdgpu_job_run, ++}; ++ ++ +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c +index e699b06..e69de29 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c +@@ -1,151 +0,0 @@ +-/* +- * Copyright 2015 Advanced Micro Devices, Inc. +- * +- * Permission is hereby granted, free of charge, to any person obtaining a +- * copy of this software and associated documentation files (the "Software"), +- * to deal in the Software without restriction, including without limitation +- * the rights to use, copy, modify, merge, publish, distribute, sublicense, +- * and/or sell copies of the Software, and to permit persons to whom the +- * Software is furnished to do so, subject to the following conditions: +- * +- * The above copyright notice and this permission notice shall be included in +- * all copies or substantial portions of the Software. +- * +- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR +- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +- * OTHER DEALINGS IN THE SOFTWARE. +- * +- * +- */ +-#include <linux/kthread.h> +-#include <linux/wait.h> +-#include <linux/sched.h> +-#include <drm/drmP.h> +-#include "amdgpu.h" +-#include "amdgpu_trace.h" +- +-int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, +- struct amdgpu_job **job) +-{ +- size_t size = sizeof(struct amdgpu_job); +- +- if (num_ibs == 0) +- return -EINVAL; +- +- size += sizeof(struct amdgpu_ib) * num_ibs; +- +- *job = kzalloc(size, GFP_KERNEL); +- if (!*job) +- return -ENOMEM; +- +- (*job)->adev = adev; +- (*job)->ibs = (void *)&(*job)[1]; +- (*job)->num_ibs = num_ibs; +- (*job)->free_job = NULL; +- +- return 0; +-} +- +-void amdgpu_job_free(struct amdgpu_job *job) +-{ +- unsigned i; +- +- for (i = 0; i < job->num_ibs; ++i) +- amdgpu_ib_free(job->adev, &job->ibs[i]); +- +- amdgpu_bo_unref(&job->uf.bo); +- /* TODO: Free the job structure here as well */ +-} +- +-static struct fence *amdgpu_sched_dependency(struct amd_sched_job *sched_job) +-{ +- struct amdgpu_job *job = to_amdgpu_job(sched_job); +- struct amdgpu_sync *sync = &job->ibs->sync; +- struct amdgpu_vm *vm = job->ibs->vm; +- +- struct fence *fence = amdgpu_sync_get_fence(sync); +- +- if (fence == NULL && vm && !job->ibs->grabbed_vmid) { +- struct amdgpu_ring *ring = job->ring; +- int r; +- +- r = amdgpu_vm_grab_id(vm, ring, sync, +- &job->base.s_fence->base); +- if (r) +- DRM_ERROR("Error getting VM ID (%d)\n", r); +- else +- job->ibs->grabbed_vmid = true; +- +- fence = amdgpu_sync_get_fence(sync); +- } +- +- return fence; +-} +- +-static struct fence *amdgpu_sched_run_job(struct amd_sched_job *sched_job) +-{ +- struct amdgpu_fence *fence = NULL; +- struct amdgpu_job *job; +- int r; +- +- if (!sched_job) { +- DRM_ERROR("job is null\n"); +- return NULL; +- } +- job = to_amdgpu_job(sched_job); +- trace_amdgpu_sched_run_job(job); +- r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, +- job->owner, &fence); +- if (r) { +- DRM_ERROR("Error scheduling IBs (%d)\n", r); +- goto err; +- } +- +-err: +- if (job->free_job) +- job->free_job(job); +- +- kfree(job); +- return fence; +-} +- +-struct amd_sched_backend_ops amdgpu_sched_ops = { +- .dependency = amdgpu_sched_dependency, +- .run_job = amdgpu_sched_run_job, +-}; +- +-int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev, +- struct amdgpu_ring *ring, +- struct amdgpu_ib *ibs, +- unsigned num_ibs, +- int (*free_job)(struct amdgpu_job *), +- void *owner, +- struct fence **f) +-{ +- struct amdgpu_job *job = +- kzalloc(sizeof(struct amdgpu_job), GFP_KERNEL); +- if (!job) +- return -ENOMEM; +- job->base.sched = &ring->sched; +- job->base.s_entity = &adev->kernel_ctx.rings[ring->idx].entity; +- job->base.s_fence = amd_sched_fence_create(job->base.s_entity, owner); +- if (!job->base.s_fence) { +- kfree(job); +- return -ENOMEM; +- } +- *f = fence_get(&job->base.s_fence->base); +- +- job->adev = adev; +- job->ring = ring; +- job->ibs = ibs; +- job->num_ibs = num_ibs; +- job->owner = owner; +- job->free_job = free_job; +- amd_sched_entity_push_job(&job->base); +- +- return 0; +-} +-- +2.7.4 + |