aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index 330e307c36ed..7e73e54eadb9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -971,22 +971,18 @@ int amdgpu_vm_clear_freed(struct amdgpu_device *adev,
971 struct amdgpu_bo_va_mapping *mapping; 971 struct amdgpu_bo_va_mapping *mapping;
972 int r; 972 int r;
973 973
974 spin_lock(&vm->freed_lock);
975 while (!list_empty(&vm->freed)) { 974 while (!list_empty(&vm->freed)) {
976 mapping = list_first_entry(&vm->freed, 975 mapping = list_first_entry(&vm->freed,
977 struct amdgpu_bo_va_mapping, list); 976 struct amdgpu_bo_va_mapping, list);
978 list_del(&mapping->list); 977 list_del(&mapping->list);
979 spin_unlock(&vm->freed_lock); 978
980 r = amdgpu_vm_bo_split_mapping(adev, NULL, 0, vm, mapping, 979 r = amdgpu_vm_bo_split_mapping(adev, NULL, 0, vm, mapping,
981 0, NULL); 980 0, NULL);
982 kfree(mapping); 981 kfree(mapping);
983 if (r) 982 if (r)
984 return r; 983 return r;
985 984
986 spin_lock(&vm->freed_lock);
987 } 985 }
988 spin_unlock(&vm->freed_lock);
989
990 return 0; 986 return 0;
991 987
992} 988}
@@ -1252,13 +1248,10 @@ int amdgpu_vm_bo_unmap(struct amdgpu_device *adev,
1252 spin_unlock(&vm->it_lock); 1248 spin_unlock(&vm->it_lock);
1253 trace_amdgpu_vm_bo_unmap(bo_va, mapping); 1249 trace_amdgpu_vm_bo_unmap(bo_va, mapping);
1254 1250
1255 if (valid) { 1251 if (valid)
1256 spin_lock(&vm->freed_lock);
1257 list_add(&mapping->list, &vm->freed); 1252 list_add(&mapping->list, &vm->freed);
1258 spin_unlock(&vm->freed_lock); 1253 else
1259 } else {
1260 kfree(mapping); 1254 kfree(mapping);
1261 }
1262 1255
1263 return 0; 1256 return 0;
1264} 1257}
@@ -1291,9 +1284,7 @@ void amdgpu_vm_bo_rmv(struct amdgpu_device *adev,
1291 interval_tree_remove(&mapping->it, &vm->va); 1284 interval_tree_remove(&mapping->it, &vm->va);
1292 spin_unlock(&vm->it_lock); 1285 spin_unlock(&vm->it_lock);
1293 trace_amdgpu_vm_bo_unmap(bo_va, mapping); 1286 trace_amdgpu_vm_bo_unmap(bo_va, mapping);
1294 spin_lock(&vm->freed_lock);
1295 list_add(&mapping->list, &vm->freed); 1287 list_add(&mapping->list, &vm->freed);
1296 spin_unlock(&vm->freed_lock);
1297 } 1288 }
1298 list_for_each_entry_safe(mapping, next, &bo_va->invalids, list) { 1289 list_for_each_entry_safe(mapping, next, &bo_va->invalids, list) {
1299 list_del(&mapping->list); 1290 list_del(&mapping->list);
@@ -1357,7 +1348,6 @@ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm)
1357 INIT_LIST_HEAD(&vm->cleared); 1348 INIT_LIST_HEAD(&vm->cleared);
1358 INIT_LIST_HEAD(&vm->freed); 1349 INIT_LIST_HEAD(&vm->freed);
1359 spin_lock_init(&vm->it_lock); 1350 spin_lock_init(&vm->it_lock);
1360 spin_lock_init(&vm->freed_lock);
1361 pd_size = amdgpu_vm_directory_size(adev); 1351 pd_size = amdgpu_vm_directory_size(adev);
1362 pd_entries = amdgpu_vm_num_pdes(adev); 1352 pd_entries = amdgpu_vm_num_pdes(adev);
1363 1353