diff options
Diffstat (limited to 'meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0763-drm-amdgpu-add-mutex-for-ba_va-valids-invalids.patch')
-rw-r--r-- | meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0763-drm-amdgpu-add-mutex-for-ba_va-valids-invalids.patch | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0763-drm-amdgpu-add-mutex-for-ba_va-valids-invalids.patch b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0763-drm-amdgpu-add-mutex-for-ba_va-valids-invalids.patch new file mode 100644 index 00000000..2489d9b7 --- /dev/null +++ b/meta-amdfalconx86/recipes-kernel/linux/linux-yocto/0763-drm-amdgpu-add-mutex-for-ba_va-valids-invalids.patch @@ -0,0 +1,99 @@ +From 38bf516c75b4ef0f5c716e05fa9baab7c52d6c39 Mon Sep 17 00:00:00 2001 +From: Chunming Zhou <David1.Zhou@amd.com> +Date: Wed, 18 Nov 2015 11:17:39 +0800 +Subject: [PATCH 0763/1050] drm/amdgpu: add mutex for ba_va->valids/invalids +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Change-Id: If93f30574a7211b0a862e31fc1ad0ab74b29a4fd +Signed-off-by: Chunming Zhou <David1.Zhou@amd.com> +Reviewed-by: Christian König <christian.koenig@amd.com> +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 17 +++++++++++------ + 2 files changed, 12 insertions(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index bcda624..7b1e2c2 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -499,6 +499,7 @@ struct amdgpu_bo_va_mapping { + + /* bo virtual addresses in a specific vm */ + struct amdgpu_bo_va { ++ struct mutex mutex; + /* protected by bo being reserved */ + struct list_head bo_list; + struct fence *last_pt_update; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +index 159ce54..d6904ef 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +@@ -922,8 +922,9 @@ int amdgpu_vm_clear_invalids(struct amdgpu_device *adev, + bo_va = list_first_entry(&vm->invalidated, + struct amdgpu_bo_va, vm_status); + spin_unlock(&vm->status_lock); +- ++ mutex_lock(&bo_va->mutex); + r = amdgpu_vm_bo_update(adev, bo_va, NULL); ++ mutex_unlock(&bo_va->mutex); + if (r) + return r; + +@@ -967,7 +968,7 @@ struct amdgpu_bo_va *amdgpu_vm_bo_add(struct amdgpu_device *adev, + INIT_LIST_HEAD(&bo_va->valids); + INIT_LIST_HEAD(&bo_va->invalids); + INIT_LIST_HEAD(&bo_va->vm_status); +- ++ mutex_init(&bo_va->mutex); + list_add_tail(&bo_va->bo_list, &bo->va); + + return bo_va; +@@ -1045,7 +1046,9 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev, + mapping->offset = offset; + mapping->flags = flags; + ++ mutex_lock(&bo_va->mutex); + list_add(&mapping->list, &bo_va->invalids); ++ mutex_unlock(&bo_va->mutex); + spin_lock(&vm->it_lock); + interval_tree_insert(&mapping->it, &vm->va); + spin_unlock(&vm->it_lock); +@@ -1121,7 +1124,7 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, + bool valid = true; + + saddr /= AMDGPU_GPU_PAGE_SIZE; +- ++ mutex_lock(&bo_va->mutex); + list_for_each_entry(mapping, &bo_va->valids, list) { + if (mapping->it.start == saddr) + break; +@@ -1135,10 +1138,12 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, + break; + } + +- if (&mapping->list == &bo_va->invalids) ++ if (&mapping->list == &bo_va->invalids) { ++ mutex_unlock(&bo_va->mutex); + return -ENOENT; ++ } + } +- ++ mutex_unlock(&bo_va->mutex); + list_del(&mapping->list); + spin_lock(&vm->it_lock); + interval_tree_remove(&mapping->it, &vm->va); +@@ -1190,8 +1195,8 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, + spin_unlock(&vm->it_lock); + kfree(mapping); + } +- + fence_put(bo_va->last_pt_update); ++ mutex_destroy(&bo_va->mutex); + kfree(bo_va); + } + +-- +1.9.1 + |