aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3477-drm-amdgpu-make-VMID-owner-none-atomic-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3477-drm-amdgpu-make-VMID-owner-none-atomic-v2.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3477-drm-amdgpu-make-VMID-owner-none-atomic-v2.patch93
1 files changed, 93 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3477-drm-amdgpu-make-VMID-owner-none-atomic-v2.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3477-drm-amdgpu-make-VMID-owner-none-atomic-v2.patch
new file mode 100644
index 00000000..e25ed4a4
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3477-drm-amdgpu-make-VMID-owner-none-atomic-v2.patch
@@ -0,0 +1,93 @@
+From 54967da0ed4dc4da658f0ee76bf74cc23ed320ff Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Wed, 31 Jan 2018 11:17:56 +0100
+Subject: [PATCH 3477/4131] drm/amdgpu: make VMID owner none atomic v2
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The variable is protected by the VMID mutex anyway.
+
+v2: grab the mutex while resetting the VMID as well
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c | 12 +++++++-----
+ drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h | 2 +-
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+index 0fd6706..9f06dfa 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.c
+@@ -271,7 +271,7 @@ static int amdgpu_vmid_grab_reserved_locked(struct amdgpu_vm *vm,
+
+ flushed = id->flushed_updates;
+ if ((amdgpu_vmid_had_gpu_reset(adev, id)) ||
+- (atomic64_read(&id->owner) != vm->entity.fence_context) ||
++ (id->owner != vm->entity.fence_context) ||
+ (job->vm_pd_addr != id->pd_gpu_addr) ||
+ (updates && (!flushed || updates->context != flushed->context ||
+ dma_fence_is_later(updates, flushed))) ||
+@@ -300,7 +300,7 @@ static int amdgpu_vmid_grab_reserved_locked(struct amdgpu_vm *vm,
+ id->flushed_updates = dma_fence_get(updates);
+ }
+ id->pd_gpu_addr = job->vm_pd_addr;
+- atomic64_set(&id->owner, vm->entity.fence_context);
++ id->owner = vm->entity.fence_context;
+ job->vm_needs_flush = needs_flush;
+ if (needs_flush) {
+ dma_fence_put(id->last_flush);
+@@ -357,7 +357,7 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
+ if (amdgpu_vmid_had_gpu_reset(adev, id))
+ continue;
+
+- if (atomic64_read(&id->owner) != vm->entity.fence_context)
++ if (id->owner != vm->entity.fence_context)
+ continue;
+
+ if (job->vm_pd_addr != id->pd_gpu_addr)
+@@ -406,7 +406,7 @@ int amdgpu_vmid_grab(struct amdgpu_vm *vm, struct amdgpu_ring *ring,
+ id->pd_gpu_addr = job->vm_pd_addr;
+ dma_fence_put(id->flushed_updates);
+ id->flushed_updates = dma_fence_get(updates);
+- atomic64_set(&id->owner, vm->entity.fence_context);
++ id->owner = vm->entity.fence_context;
+
+ needs_flush:
+ job->vm_needs_flush = true;
+@@ -486,13 +486,15 @@ void amdgpu_vmid_reset(struct amdgpu_device *adev, unsigned vmhub,
+ struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub];
+ struct amdgpu_vmid *id = &id_mgr->ids[vmid];
+
+- atomic64_set(&id->owner, 0);
++ mutex_lock(&id_mgr->lock);
++ id->owner = 0;
+ id->gds_base = 0;
+ id->gds_size = 0;
+ id->gws_base = 0;
+ id->gws_size = 0;
+ id->oa_base = 0;
+ id->oa_size = 0;
++ mutex_unlock(&id_mgr->lock);
+ }
+
+ /**
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
+index 38f37c1..20d4eca 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ids.h
+@@ -43,7 +43,7 @@ struct amdgpu_vmid {
+ struct list_head list;
+ struct amdgpu_sync active;
+ struct dma_fence *last_flush;
+- atomic64_t owner;
++ uint64_t owner;
+
+ uint64_t pd_gpu_addr;
+ /* last flushed PD/PT update */
+--
+2.7.4
+