diff options
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.patch | 93 |
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 + |