aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0280-drm-amdgpu-rename-amdgpu_sched.c-to-amdgpu_job.c.patch
diff options
context:
space:
mode:
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.patch338
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
+