diff options
Diffstat (limited to 'common/recipes-kernel/linux/files/0712-drm-amdgpu-add-spin-lock-to-protect-freed-list-in-vm.patch')
-rw-r--r-- | common/recipes-kernel/linux/files/0712-drm-amdgpu-add-spin-lock-to-protect-freed-list-in-vm.patch | 98 |
1 files changed, 0 insertions, 98 deletions
diff --git a/common/recipes-kernel/linux/files/0712-drm-amdgpu-add-spin-lock-to-protect-freed-list-in-vm.patch b/common/recipes-kernel/linux/files/0712-drm-amdgpu-add-spin-lock-to-protect-freed-list-in-vm.patch deleted file mode 100644 index 70f61c75..00000000 --- a/common/recipes-kernel/linux/files/0712-drm-amdgpu-add-spin-lock-to-protect-freed-list-in-vm.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 81d75a30c6ed006a314f5c760196d04758660ca6 Mon Sep 17 00:00:00 2001 -From: jimqu <Jim.Qu@amd.com> -Date: Fri, 4 Dec 2015 17:17:00 +0800 -Subject: [PATCH 0712/1565] drm/amdgpu: add spin lock to protect freed list in - vm (v2) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -there is a protection fault about freed list when OCL test. -add a spin lock to protect it. - -v2: drop changes in vm_fini - -Signed-off-by: JimQu <jim.qu@amd.com> -Reviewed-by: Christian König <christian.koenig@amd.com> ---- - drivers/gpu/drm/amd/amdgpu/amdgpu.h | 2 ++ - drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 16 +++++++++++++--- - 2 files changed, 15 insertions(+), 3 deletions(-) - -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 670fefb..5a5f04d 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -956,6 +956,8 @@ struct amdgpu_vm { - struct amdgpu_vm_id ids[AMDGPU_MAX_RINGS]; - /* for interval tree */ - spinlock_t it_lock; -+ /* protecting freed */ -+ spinlock_t freed_lock; - }; - - struct amdgpu_vm_manager { -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -index a582ef5..b53d273 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c -@@ -885,17 +885,21 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev, - struct amdgpu_bo_va_mapping *mapping; - int r; - -+ spin_lock(&vm->freed_lock); - while (!list_empty(&vm->freed)) { - mapping = list_first_entry(&vm->freed, - struct amdgpu_bo_va_mapping, list); - list_del(&mapping->list); -- -+ spin_unlock(&vm->freed_lock); - r = amdgpu_vm_bo_update_mapping(adev, vm, mapping, 0, 0, NULL); - kfree(mapping); - if (r) - return r; - -+ spin_lock(&vm->freed_lock); - } -+ spin_unlock(&vm->freed_lock); -+ - return 0; - - } -@@ -1155,10 +1159,13 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev, - spin_unlock(&vm->it_lock); - trace_amdgpu_vm_bo_unmap(bo_va, mapping); - -- if (valid) -+ if (valid) { -+ spin_lock(&vm->freed_lock); - list_add(&mapping->list, &vm->freed); -- else -+ spin_unlock(&vm->freed_lock); -+ } else { - kfree(mapping); -+ } - - return 0; - } -@@ -1191,7 +1198,9 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev, - interval_tree_remove(&mapping->it, &vm->va); - spin_unlock(&vm->it_lock); - trace_amdgpu_vm_bo_unmap(bo_va, mapping); -+ spin_lock(&vm->freed_lock); - list_add(&mapping->list, &vm->freed); -+ spin_unlock(&vm->freed_lock); - } - list_for_each_entry_safe(mapping, next, &bo_va->invalids, list) { - list_del(&mapping->list); -@@ -1252,6 +1261,7 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm) - INIT_LIST_HEAD(&vm->cleared); - INIT_LIST_HEAD(&vm->freed); - spin_lock_init(&vm->it_lock); -+ spin_lock_init(&vm->freed_lock); - pd_size = amdgpu_vm_directory_size(adev); - pd_entries = amdgpu_vm_num_pdes(adev); - --- -1.9.1 - |