aboutsummaryrefslogtreecommitdiffstats
path: root/common/recipes-kernel/linux/files/0237-drm-amdgpu-grab-VMID-before-submitting-job-v5.patch
diff options
context:
space:
mode:
Diffstat (limited to 'common/recipes-kernel/linux/files/0237-drm-amdgpu-grab-VMID-before-submitting-job-v5.patch')
-rw-r--r--common/recipes-kernel/linux/files/0237-drm-amdgpu-grab-VMID-before-submitting-job-v5.patch141
1 files changed, 0 insertions, 141 deletions
diff --git a/common/recipes-kernel/linux/files/0237-drm-amdgpu-grab-VMID-before-submitting-job-v5.patch b/common/recipes-kernel/linux/files/0237-drm-amdgpu-grab-VMID-before-submitting-job-v5.patch
deleted file mode 100644
index b36f151a..00000000
--- a/common/recipes-kernel/linux/files/0237-drm-amdgpu-grab-VMID-before-submitting-job-v5.patch
+++ /dev/null
@@ -1,141 +0,0 @@
-From 26605d32bf6727a47cda37191eeecaa7f92138ec Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
-Date: Tue, 3 Nov 2015 20:58:50 +0100
-Subject: [PATCH 0237/1110] drm/amdgpu: grab VMID before submitting job v5
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This allows the scheduler to handle the dependencies on ID contention as well.
-
-v2: grab id only once
-v3: use a separate lock for the VMIDs
-v4: cleanup after semaphore removal
-v5: minor coding style change
-
-Signed-off-by: Christian König <christian.koenig@amd.com>
-Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
-Acked-by: Alex Deucher <alexander.deucher@amd.com>
-Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
----
- drivers/gpu/drm/amd/amdgpu/amdgpu.h | 4 ++++
- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 1 +
- drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c | 17 +++++------------
- drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 26 +++++++++++++++++++++++++-
- 4 files changed, 35 insertions(+), 13 deletions(-)
-
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-index a1da7e2..f970afa 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
-@@ -737,6 +737,7 @@ struct amdgpu_ib {
- struct amdgpu_ring *ring;
- struct amdgpu_fence *fence;
- struct amdgpu_user_fence *user;
-+ bool grabbed_vmid;
- struct amdgpu_vm *vm;
- struct amdgpu_ctx *ctx;
- struct amdgpu_sync sync;
-@@ -886,6 +887,9 @@ struct amdgpu_vm {
- };
-
- struct amdgpu_vm_manager {
-+ /* protecting IDs */
-+ struct mutex lock;
-+
- struct {
- struct fence *active;
- atomic_long_t owner;
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-index c96437c..9bab3dc 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
-@@ -1456,6 +1456,7 @@ int amdgpu_device_init(struct amdgpu_device *adev,
- /* mutex initialization are all done here so we
- * can recall function without having locking issues */
- mutex_init(&adev->ring_lock);
-+ mutex_init(&adev->vm_manager.lock);
- atomic_set(&adev->irq.ih.lock, 0);
- mutex_init(&adev->gem.mutex);
- mutex_init(&adev->pm.mutex);
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
-index 54cede3..56ae9a5 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ib.c
-@@ -142,21 +142,17 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs,
- return -EINVAL;
- }
-
-+ if (vm && !ibs->grabbed_vmid) {
-+ dev_err(adev->dev, "VM IB without ID\n");
-+ return -EINVAL;
-+ }
-+
- r = amdgpu_ring_lock(ring, (256 + AMDGPU_NUM_SYNCS * 8) * num_ibs);
- if (r) {
- dev_err(adev->dev, "scheduling IB failed (%d).\n", r);
- return r;
- }
-
-- if (vm) {
-- /* grab a vm id if necessary */
-- r = amdgpu_vm_grab_id(ibs->vm, ibs->ring, &ibs->sync);
-- if (r) {
-- amdgpu_ring_unlock_undo(ring);
-- return r;
-- }
-- }
--
- r = amdgpu_sync_wait(&ibs->sync);
- if (r) {
- amdgpu_ring_unlock_undo(ring);
-@@ -207,9 +203,6 @@ int amdgpu_ib_schedule(struct amdgpu_device *adev, unsigned num_ibs,
- AMDGPU_FENCE_FLAG_64BIT);
- }
-
-- if (ib->vm)
-- amdgpu_vm_fence(adev, ib->vm, &ib->fence->base);
--
- amdgpu_ring_unlock_commit(ring);
- return 0;
- }
-diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
-index dd9fac3..b22a95f 100644
---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
-+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
-@@ -31,7 +31,31 @@
- static struct fence *amdgpu_sched_dependency(struct amd_sched_job *sched_job)
- {
- struct amdgpu_job *job = to_amdgpu_job(sched_job);
-- return amdgpu_sync_get_fence(&job->ibs->sync);
-+ 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->ibs->ring;
-+ struct amdgpu_device *adev = ring->adev;
-+ int r;
-+
-+ mutex_lock(&adev->vm_manager.lock);
-+ r = amdgpu_vm_grab_id(vm, ring, sync);
-+ if (r) {
-+ DRM_ERROR("Error getting VM ID (%d)\n", r);
-+ } else {
-+ fence = &job->base.s_fence->base;
-+ amdgpu_vm_fence(ring->adev, vm, fence);
-+ job->ibs->grabbed_vmid = true;
-+ }
-+ mutex_unlock(&adev->vm_manager.lock);
-+
-+ fence = amdgpu_sync_get_fence(sync);
-+ }
-+
-+ return fence;
- }
-
- static struct fence *amdgpu_sched_run_job(struct amd_sched_job *sched_job)
---
-2.7.4
-